class A {
private String x;
private String y;
//getters and setters
}
假设我有一个类型 A 的对象列表。现在考虑一下。
A a = new A("x","something1");
A b = new A("x","something2");
A c = new A("y","something3");
A d = new A("y","something4");
List<A> aList = new ArrayList<>();
`alist` contains a, b,c ,d
我可以过滤列表并根据以下条件创建子列表列表:如果属性 x 的值相等,则将它们分组到子列表中?
所以输出应该是这样的。
List<A> someList = new ArrayList<>(); //someList contains a,b
List<A> someOtherList = new ArrayList<>(); //someOtherList contains c,d.
最终输出列表包含 someList 和 someOtherList。
最佳答案
If the value of the property x is equal group them to a sublist.
你自己说的,需要根据属性x
的值对列表进行分组。使用 Stream API,这是通过使用收集器来完成的 Collectors.groupingBy(classifier)
.此收集器返回一个映射,其中的条目是将给定分类器应用于 Stream 元素的结果,并将值收集到一个列表中。
Map<String, List<A>> map = aList.stream().collect(Collectors.groupingBy(A::getX));
在您的案例中,这张 map 将包含 2 个条目。第一个是指向元素 a
和 b
的键 x
;第二个是指向元素 c
和 d
的键 y
。
关于java - 从具有相似属性的 List<Object> 创建 List<Set>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34588808/