最近我遇到了Java 8的新语法,可以用来将列表转换为集合:
Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));
我想知道使用这种方法将一个列表转换为一个集合的优点,而不是传统的方法(通过将它作为参数传递给HashSet)。
dbf7pr2w1#
这样做的好处是,同时执行其他功能操作变得更容易(或者更准确地说,需要更少的语法更改)。假设稍后你只想要集合中的 * 偶数 *,那么你可以用一个过滤器来简单地做到这一点:
Set<Integer> myset = mylist.stream() .filter(p -> p%2==0) .collect(Collectors.toSet());
如果你用传统的方法完成它,那么你要么需要将它转换为上面的语法,要么编写一个额外的循环来遍历并只提取出你想要的值。(This并不意味着它总是更好--在某些情况下,您可能希望阻止某人在以后更改代码以过滤掉值,在这种情况下,您可能会认为传统的方法仍然更可取。
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
fivyi3re3#
你可以简单地使用这个精确的代码:
Set<Integer> myset = new HashSet<>(mylist);
就这样
3条答案
按热度按时间dbf7pr2w1#
这样做的好处是,同时执行其他功能操作变得更容易(或者更准确地说,需要更少的语法更改)。
假设稍后你只想要集合中的 * 偶数 *,那么你可以用一个过滤器来简单地做到这一点:
如果你用传统的方法完成它,那么你要么需要将它转换为上面的语法,要么编写一个额外的循环来遍历并只提取出你想要的值。
(This并不意味着它总是更好--在某些情况下,您可能希望阻止某人在以后更改代码以过滤掉值,在这种情况下,您可能会认为传统的方法仍然更可取。
dsekswqp2#
请在下面的代码中找到使用Java 8的流API来协调List to Set:
输出如下:
fivyi3re3#
你可以简单地使用这个精确的代码:
就这样