java stream流对list中一个字段(泛型为map),对这个map中某一个相同的key的值进行加和
时间: 2024-01-21 21:18:09 浏览: 103
可以使用Java 8中的Stream API和Collectors类来实现这个功能。假设我们有一个名为list的List,其中包含多个Map对象,每个Map对象都具有相同的键名,我们要对这些Map对象中的某个特定键的值进行加和,可以使用以下代码:
```java
Map<String, Integer> result = list.stream()
.flatMap(map -> map.entrySet().stream())
.filter(entry -> entry.getKey().equals("keyName"))
.collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.summingInt(Map.Entry::getValue)));
```
这里我们先使用flatMap方法将每个Map对象转化为多个Map.Entry对象,然后使用filter方法过滤出我们需要的键,最后使用groupingBy和summingInt方法将相同键的值进行加和并存储在一个新的Map中。
相关问题
jdk1.7,list中泛型为一个实体类,用最少的代码求这个list某个字段的平均值,字段类型为bigdeciml
可以使用Java 8的Stream API来实现,代码如下:
```java
List<Entity> list = new ArrayList<>();
// 添加实体对象到list中
BigDecimal avg = list.stream()
.map(Entity::getField) // 获取需要求平均值的字段
.reduce(BigDecimal.ZERO, BigDecimal::add) // 将所有字段相加
.divide(BigDecimal.valueOf(list.size()), 2, RoundingMode.HALF_UP); // 求平均值并保留两位小数
System.out.println("平均值为:" + avg);
```
其中,`Entity`是实体类,`getField()`是获取需要求平均值的字段的方法。`RoundingMode.HALF_UP`表示四舍五入。
Java,在一个泛型为User的List中,取出所有User的"name"字段拼接成字符串,用","分割
可以使用Java 8的Stream API来实现:
```
List<User> userList = ... // 初始化泛型为User的List
String names = userList.stream()
.map(User::getName)
.collect(Collectors.joining(","));
```
这里使用了`map`方法将每个User对象映射为其"name"字段,然后使用`collect`方法将所有name拼接成一个字符串,中间用","分割。最终得到的字符串赋值给`names`变量。
阅读全文