使用java8将list转换为set

8zzbczxx  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(361)

最近我遇到了Java 8的新语法,可以用来将列表转换为集合:

Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));

我想知道使用这种方法将一个列表转换为一个集合的优点,而不是传统的方法(通过将它作为参数传递给HashSet)。

dbf7pr2w

dbf7pr2w1#

这样做的好处是,同时执行其他功能操作变得更容易(或者更准确地说,需要更少的语法更改)。
假设稍后你只想要集合中的 * 偶数 *,那么你可以用一个过滤器来简单地做到这一点:

Set<Integer> myset = mylist.stream()
        .filter(p -> p%2==0)
        .collect(Collectors.toSet());

如果你用传统的方法完成它,那么你要么需要将它转换为上面的语法,要么编写一个额外的循环来遍历并只提取出你想要的值。
(This并不意味着它总是更好--在某些情况下,您可能希望阻止某人在以后更改代码以过滤掉值,在这种情况下,您可能会认为传统的方法仍然更可取。

dsekswqp

dsekswqp2#

请在下面的代码中找到使用Java 8的流API来协调List to Set:

package streamapi;
import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
class Person{
    int empid;
    String name;
    
    Person(int empid,String name){
        this.empid = empid;
        this.name = name;
    }
    
    public String toString(){
        return "id"+this.empid+"name"+this.name;
    }
    
    public boolean equals(Object obj) {
        Person p = (Person)obj;
        if(p.empid==this.empid && p.name.equals(this.name)) {
            return true;
        }
        return false;
    }
    
    public int hashCode() {
        return this.empid+this.name.hashCode();
    }
}

public class collectionFilter {

    public static void main(String[] args) {
        List<Person> list = new ArrayList();
        list.add(new Person(101,"aaa"));
        list.add(new Person(200,"bbbb"));
        list.add(new Person(150,"ccccc"));
        list.add(new Person(250,"ddddd"));
        list.add(new Person(250,"ddddd"));
        
        converListToSet(list);
    }
    
    public static void converListToSet(List<Person> list) {
        Set<Person> set = list.stream()
                .collect(Collectors.toSet());
        set.forEach(person->System.out.println(person));
    }
}

输出如下:

id200namebbbb
id101nameaaa
id150nameccccc
id250nameddddd
fivyi3re

fivyi3re3#

你可以简单地使用这个精确的代码:

Set<Integer> myset = new HashSet<>(mylist);

就这样

相关问题