jdk8中list累加问题

jdk8 lambda实现对list中某id字段重复的,累加他们另一个value字段,list中id不重复的分组

你可以使用Java 8的Lambda表达式来实现对列表中重复ID的元素进行累加,并将没有重复ID的元素进行分组。以下是一个示例代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Data> dataList = new ArrayList<>();
        dataList.add(new Data(1, "A", 10));
        dataList.add(new Data(2, "B", 20));
        dataList.add(new Data(1, "C", 30));
        dataList.add(new Data(3, "D", 40));
        dataList.add(new Data(2, "E", 50));

        Map<Integer, Integer> idSumMap = dataList.stream()
                .collect(Collectors.groupingBy(Data::getId,
                        Collectors.summingInt(Data::getValue)));

        System.out.println("ID重复元素的累加结果:");
        idSumMap.forEach((id, sum) -> System.out.println("ID: " + id + ", Sum: " + sum));

        Map<Integer, List<Data>> idGroupMap = dataList.stream()
                .collect(Collectors.groupingBy(Data::getId));

        System.out.println("\nID不重复的元素分组结果:");
        idGroupMap.forEach((id, group) -> {
            System.out.println("ID: " + id);
            group.forEach(data -> System.out.println("Value: " + data.getValue()));
        });
    }

    static class Data {
        private int id;
        private String name;
        private int value;

        public Data(int id, String name, int value) {
            this.id = id;
            this.name = name;
            this.value = value;
        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public int getValue() {
            return value;
        }
    }
}

在这个例子中,我们首先使用Collectors.groupingBy方法和Collectors.summingInt方法对列表中重复ID的元素进行累加。得到的idSumMap表示ID和对应值的累加结果。

然后,我们使用Collectors.groupingBy方法对列表中没有重复ID的元素进行分组。得到的idGroupMap表示ID和对应的元素列表。

注意:在上面的示例代码中,我们假设Data类具有getId()getValue()方法来获取对应字段的值。你可能需要根据你的实际情况进行调整。

【以下回答由 GPT 生成】

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        // Sample list of objects
        List<MyObject> list = new ArrayList<>();
        list.add(new MyObject(1, 10));
        list.add(new MyObject(2, 20));
        list.add(new MyObject(1, 30));
        list.add(new MyObject(3, 40));

        Map<Integer, Integer> result = list.stream()
                .collect(Collectors.groupingBy(MyObject::getId, Collectors.summingInt(MyObject::getValue)));

        System.out.println(result);
    }
}

class MyObject {
    private int id;
    private int value;

    public MyObject(int id, int value) {
        this.id = id;
        this.value = value;
    }

    public int getId() {
        return id;
    }

    public int getValue() {
        return value;
    }
}

使用jdk8的lambda表达式来解决该问题的步骤如下:

  1. 创建一个包含对象的list,并且注意对象需要有一个id字段和一个value字段。
  2. 使用stream()方法将该list转化为一个流(Stream)。
  3. 使用Collectors.groupingBy()方法将流中的对象按照id进行分组,并使用Collectors.summingInt()方法对每组对象的value字段进行累加。
  4. 最终得到一个Map,其中key是id,value是对应id下所有对象的value字段的累加和。

以上代码中的MyObject类是一个简单的示例对象,你可以根据实际情况来修改代码中的类和字段名。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^