使用 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}]