【发布时间】:2023-04-08 12:51:01
【问题描述】:
我有 POJO 类:
@Data
@AllArgsConstructor
public class Person {
private String name;
private String surname;
}
我有一些可执行代码:
public class Main {
public static void main(String[] args) {
Person john1 = new Person("John", "Smith");
Person john2 = new Person("John", "Brown");
Person nancy1 = new Person("Nancy", "James");
Person nancy2 = new Person("Nancy", "Williams");
Person kate1 = new Person("Kate", "Fletcher");
List<Person> persons = List.of(john1, kate1, john2, nancy1, nancy2);
Map<String, List<Person>> result = persons.stream().collect(Collectors.groupingBy(Person::getName));
System.out.println(result);
}
}
我怎样才能让Stream<List<Person>> 而不是Map<String, List<Person>> 变成result?并且不需要钥匙。我可以在不使用 Map-collection 的情况下获得它吗?
UPD:每个列表中都有同名的人
【问题讨论】:
-
如果你想要同名人员的列表:
result.values()- 如果需要,添加.stream()作为流(但问题有点不清楚,只给出了必需的类型,而不是什么数据预计) -
@user16320675 感谢您的回答。我需要带有人员列表的流,其中每个列表中都有同名的人。你的决定是合适的,但在我写的问题的最后,如果没有地图使用是可能的
-
为什么不想使用地图?如果没有地图,它会渐进地很慢。
-
@OlegSandro,如果您需要按某个字段/属性对人员进行分组,则需要收集到地图中。
-
好吧,你可以写一个循环只使用列表,但还有什么不应该使用?为什么? (请edit 问题和缺少的信息,例如同名人员的列表,允许 使用的内容,......) - 无论如何,如果你想要一个列表流,列表必须先保存在某个集合中
标签: java java-stream lightweight-stream-api