使用 java 流比较对象数组列表中的元素
Compare elements within arraylist of Object using java stream
我有对象列表。我想比较列表的元素并在条件相等时执行操作。
class A{ String abc; int pqr; }
我有清单项目
"items": [ { "pqr": 2, "abc": 1994 }, { "pqr": 2, "abc": 1994 }, { "pqr": 1, "abc": 64 } ]
现在我希望我的输出列表为
"items": [ { "pqr": 4, "abc": 1994 }, { "pqr": 1, "abc": 64 } ]
i/e 在 abc 的基础上比较第 th 个元素,如果它相同,则添加其 pqr 值并删除重复项。
我如何使用流或高效地执行此操作?
如 Ralf 所述,您可以使用 groupingBy
获得 Map
,其中 abc
作为键,pqr
的总和作为值:
Map<String, Integer> groupBy = list.stream()
.collect(Collectors.groupingBy(Container::getAbc, Collectors.summingInt(Container::getPqr)));
System.out.println(groupBy);
产生 {1994=4, 64=1}
。
如果您需要将其转换为 List
,则必须迭代此 map
:
List<Container> list = groupBy.entrySet()
.stream()
.map(e -> new Container(e.getKey(), e.getValue()))
.collect(Collectors.toList());
System.out.println(list);
产生(覆盖toString
)[A{abc=1994, pqr=4}, A{abc=64, pqr=1}]
我有对象列表。我想比较列表的元素并在条件相等时执行操作。
class A{ String abc; int pqr; }
我有清单项目
"items": [ { "pqr": 2, "abc": 1994 }, { "pqr": 2, "abc": 1994 }, { "pqr": 1, "abc": 64 } ]
现在我希望我的输出列表为
"items": [ { "pqr": 4, "abc": 1994 }, { "pqr": 1, "abc": 64 } ]
i/e 在 abc 的基础上比较第 th 个元素,如果它相同,则添加其 pqr 值并删除重复项。
我如何使用流或高效地执行此操作?
如 Ralf 所述,您可以使用 groupingBy
获得 Map
,其中 abc
作为键,pqr
的总和作为值:
Map<String, Integer> groupBy = list.stream()
.collect(Collectors.groupingBy(Container::getAbc, Collectors.summingInt(Container::getPqr)));
System.out.println(groupBy);
产生 {1994=4, 64=1}
。
如果您需要将其转换为 List
,则必须迭代此 map
:
List<Container> list = groupBy.entrySet()
.stream()
.map(e -> new Container(e.getKey(), e.getValue()))
.collect(Collectors.toList());
System.out.println(list);
产生(覆盖toString
)[A{abc=1994, pqr=4}, A{abc=64, pqr=1}]