Java 创建列表<;设置>;从列表中<;对象>;性质相似 假设我有A类对象的列表,现在考虑.< /P> class A { private String x; private String y; //getters and setters } aa=新的A(“x”,“某物1”); A b=新的A(“x”,“某物2”); A c=新的A(“y”,“某物3”); A d=新的A(“y”,“某物4”); 列表列表=新的ArrayList(); `包含a、b、c、d
我是否可以根据以下条件筛选列表并创建子列表:如果属性x的值等于,则将其分组到子列表 所以输出应该是这样的Java 创建列表<;设置>;从列表中<;对象>;性质相似 假设我有A类对象的列表,现在考虑.< /P> class A { private String x; private String y; //getters and setters } aa=新的A(“x”,“某物1”); A b=新的A(“x”,“某物2”); A c=新的A(“y”,“某物3”); A d=新的A(“y”,“某物4”); 列表列表=新的ArrayList(); `包含a、b、c、d,java,java-8,java-stream,Java,Java 8,Java Stream,我是否可以根据以下条件筛选列表并创建子列表:如果属性x的值等于,则将其分组到子列表 所以输出应该是这样的 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
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
List-someList=new-ArrayList()//someList包含a,b
List someOtherList=new ArrayList()//其他列表包含c,d。
最终输出列表包含someList和someOtherList。您可以使用Java 8流API和收集器:
List<A> someList = new ArrayList<>(); //someList contains a,b
List<A> someOtherList = new ArrayList<>(); //someOtherList contains c,d.
如果要按两个或多个属性分组,可以使用数组.asList
作为分类器:
List<A> someList = result.get("x"); // contains a, b
List<A> someOtherList = result.get("y"); // contains c, d
Map result=aList.stream().collect(
Collectors.groupby(a->Arrays.asList(a.getX(),a.getY());
这里有一个复合键,表示为
List
您可以使用Java 8流API和收集器:
List<A> someList = new ArrayList<>(); //someList contains a,b
List<A> someOtherList = new ArrayList<>(); //someOtherList contains c,d.
如果要按两个或多个属性分组,可以使用数组.asList
作为分类器:
List<A> someList = result.get("x"); // contains a, b
List<A> someOtherList = result.get("y"); // contains c, d
Map result=aList.stream().collect(
Collectors.groupby(a->Arrays.asList(a.getX(),a.getY());
这里有一个复合键,表示为List
如果属性x的值等于,则将其分组为子列表
您自己说过,您需要根据属性x
的值对列表进行分组。对于流API,这是通过使用收集器完成的。此收集器返回一个映射,其中条目是将给定分类器应用于流元素的结果,值被收集到列表中
Map<List<Object>, List<A>> result = aList.stream().collect(
Collectors.groupingBy(a -> Arrays.asList(a.getX(), a.getY())));
Map Map=aList.stream().collect(Collectors.groupingBy(A::getX));
在您的案例中,此映射将包含2个条目。第一个是键x
,指向元素a
和b
;第二个将是键y
,指向元素c
和d
如果属性x的值等于,则将其分组为子列表
您自己说过,您需要根据属性x
的值对列表进行分组。对于流API,这是通过使用收集器完成的。此收集器返回一个映射,其中条目是将给定分类器应用于流元素的结果,值被收集到列表中
Map<List<Object>, List<A>> result = aList.stream().collect(
Collectors.groupingBy(a -> Arrays.asList(a.getX(), a.getY())));
Map Map=aList.stream().collect(Collectors.groupingBy(A::getX));
在您的案例中,此映射将包含2个条目。第一个是键
x
,指向元素a
和b
;第二个是键y
,指向元素c
,d
,@Tagir提到了一种方法,如果我想检查两个属性值是否相等。只是发布一个不同的实现它
Map<String, List<A>> map = aList.stream().collect(Collectors.groupingBy(A::getX));
Map result=aList.parallelStream()
.collect(收集器).groupingBy(A::getX,
Collectors.collectionAndThen(Collectors.groupingBy(A::getY),Map::values));
parallelStream()
以防列表太大。@Tagir提到了一种方法,可以检查两个属性值是否相等。只是发布一个不同的实现它
Map<String, List<A>> map = aList.stream().collect(Collectors.groupingBy(A::getX));
Map result=aList.parallelStream()
.collect(收集器).groupingBy(A::getX,
Collectors.collectionAndThen(Collectors.groupingBy(A::getY),Map::values));
parallelStream()
以防列表太大。您正在寻找收集器。groupingBy
?将列表中的元素按其x
属性分组,然后获取相应的列表。是否正在查找收集器。groupingBy
?根据其x
属性对列表中的元素进行分组,然后获取相应的列表。假设代替方法引用(仅针对1个属性值相等)我想通过两个属性值检查如何实现假设代替方法引用(仅针对1个属性值相等)我想通过两个属性值来检查它是如何实现的