一个list中 取相同对象相加 java
时间: 2023-11-12 10:13:28 浏览: 42
假设你有一个List<Integer>,你可以使用Java 8的Stream API来获取相同的元素并将它们相加:
```java
List<Integer> list = Arrays.asList(1, 2, 3, 2, 4, 5, 3, 6);
Map<Integer, Integer> result = list.stream().collect(Collectors.toMap(Function.identity(), i -> 1, Integer::sum));
```
这将返回一个Map<Integer, Integer>,其中键是列表中出现的每个整数,值是该整数在列表中出现的次数的总和。在这个例子中,result将是{1=1, 2=2, 3=2, 4=1, 5=1, 6=1}。
相关问题
java 8 list,相同对象去重相加生成新的list
如果您有一个对象列表,并且想要按照某个属性进行去重并求和,可以使用Stream API 和 Collectors 工具类来完成。假设您的对象为Person,有一个属性为age,下面是一个Java 8代码示例:
```java
List<Person> personList = Arrays.asList(new Person("Tom", 20),
new Person("Mary", 18),
new Person("John", 20));
List<Person> uniquePersonList = personList.stream()
.collect(Collectors.toMap(Person::getAge,
Function.identity(),
(p1, p2) -> p1))
.values()
.stream()
.collect(Collectors.toList());
System.out.println(uniquePersonList);
```
输出结果为:[Person{name='Tom', age=20}, Person{name='Mary', age=18}]
在这个示例中,我们使用了Collectors.toMap()方法来按照年龄进行去重,然后通过取values()方法获取去重后的Person对象列表。需要注意的是,如果存在重复的键(也就是年龄),我们使用(p1, p2) -> p1的lambda表达式来选择第一个对象,这样可以保证不会出现重复的对象。
java 一个list<object>,把集合中 id 相同的对象,金额字段相加,然后返回一个没有重复id 的集合
要在 Java 中对一个 `List<Object>` 集合中的对象进行处理,将相同 ID 的对象的金额字段相加,并返回一个没有重复 ID 的集合,可以按照以下步骤进行操作:
假设对象的类为 `Object`,其中包含 ID 和金额字段:
```java
public class Object {
private int id;
private double amount;
// 构造函数、getter 和 setter 方法等省略
}
```
现在有一个包含多个对象的列表:
```java
List<Object> objects = new ArrayList<>();
```
首先,我们可以使用 Stream 和 Collectors 类的 `toMap()` 方法将相同 ID 的对象的金额字段相加:
```java
Map<Integer, Double> idAmountMap = objects.stream()
.collect(Collectors.toMap(Object::getId, Object::getAmount, Double::sum));
```
这将生成一个映射(Map),其中键是对象的 ID,值是相应对象的金额字段之和。如果有多个对象具有相同的 ID,则 `Double::sum` 函数将用于将它们的金额字段相加。
接下来,我们可以使用 `idAmountMap` 的键集合创建一个新的列表:
```java
List<Object> resultList = idAmountMap.keySet().stream()
.map(id -> new Object(id, idAmountMap.get(id)))
.collect(Collectors.toList());
```
这将遍历 `idAmountMap` 的键集合,并通过构造函数创建新的 `Object` 对象,将 ID 和对应的金额字段传递给构造函数。最后,我们将这些新创建的对象收集到一个列表中。
最后,我们可以返回这个没有重复 ID 的结果列表:
```java
return resultList;
```
请确保根据实际情况调整代码中的类名、字段名和方法名。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)