例如,我有一个名字和姓氏的人 .
我想从人员列表中收集一个字符串列表(姓名和姓氏),但似乎我不能每个列表使用两次 Map 或者每个列表不能使用两次流 . 我的代码是:
persons.stream()
.map(Person::getName)
.collect(Collectors.toSet())
.stream().map(Person::getSurname)
.collect(Collectors.toList())
但它一直告诉我,无法从静态上下文中引用 Person::getSurname
非静态方法 .
我究竟做错了什么?
3 回答
要在同一列表中同时获取姓名和姓氏,您可以这样做:
当你做的时候:
结果是
Set<String>
仅包含persons
的name
. 然后,您将从此Set
重新创建一个流,而不是从您的List<Person> persons
重新创建 .这就是为什么你不能使用
Person::getSurname
来映射这个Set
.来自@Alexis C.的解决方案:
persons.stream().flatMap(p -> Stream.of(p.getName(), p.getSurname()).collect(Collectors.toSet())
必须完成这项工作 .你的代码应该是这样的: