Rav*_*avi 2 java java-8 java-stream
我需要从给定的超级列表中获取子列表,如下所述.
假设我有一个"Person"对象的超级列表,如下所示:
List<Person> personsList = new ArrayList<>();
personsList.add(new Person("John", 28));
personsList.add(new Person("Paul", 29));
personsList.add(new Person("Adam", 30));
personsList.add(new Person("Peter", 31));
personsList.add(new Person("Kate", 32));
personsList.add(new Person("John", 67));
personsList.add(new Person("Paul", 68));
personsList.add(new Person("Adam", 69));
Run Code Online (Sandbox Code Playgroud)
让Person类定义如下:
class Person {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ": " + age;
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用Java Streams API,如何获取包含以下条目的子列表(请注意,必须获取具有相同名称的对象的重复实例):
John : 28
John : 67
Paul : 29
Paul : 68
Adam : 30
Adam : 69
Run Code Online (Sandbox Code Playgroud)
有人可以通过使用Java 8 Streams API帮助我实现这一目标吗?
PS:我不会事先知道那些对象的名称是什么值.
以下操作将为您提供等待结果.您首先按名称对所有人进行分组,从结果列表中排除所有大小小于2的人并将flatMap排序,排序并打印所有内容
personsList.stream()
.collect(Collectors.groupingBy(Person::getName))
.values()
.stream()
.filter(list -> list.size() > 1)
.flatMap(List::stream)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
产量
Adam: 30
Adam: 69
John: 28
John: 67
Paul: 29
Paul: 68
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |