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表达式来解决该问题的步骤如下:
stream()
方法将该list转化为一个流(Stream)。Collectors.groupingBy()
方法将流中的对象按照id进行分组,并使用Collectors.summingInt()
方法对每组对象的value字段进行累加。以上代码中的MyObject类是一个简单的示例对象,你可以根据实际情况来修改代码中的类和字段名。
【相关推荐】