list.stream()分组字符串转数字累加
时间: 2023-11-15 09:54:50 浏览: 82
可以使用Java 8的Stream API中的groupingBy和summingInt方法来实现该功能。假设我们有一个List<String>,其中每个字符串都包含一个数字和一个字母,例如"1a", "2b", "3c"等等,我们想要将它们按字母分组,并将数字累加起来。代码示例如下:
```
List<String> list = Arrays.asList("1a", "2b", "3c", "4a", "5b", "6c");
Map<String, Integer> result = list.stream()
.collect(Collectors.groupingBy(s -> s.substring(1), Collectors.summingInt(s -> Integer.parseInt(s.substring(0, 1)))));
System.out.println(result);
```
输出结果为:{a=5, b=7, c=9}
相关问题
list.stream()使用
Java 8中引入了Stream API,它是一种高效的、函数式的数据处理方式。list.stream()是将一个List对象转换成一个Stream对象。利用Stream API,可以对List中的元素进行高效、灵活的操作,例如过滤、映射、排序、聚合等。
下面是一些常见的list.stream()的使用场景:
1. 过滤元素
可以使用filter方法过滤List中的元素,例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> filteredList = list.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toList());
System.out.println(filteredList); // [2, 4, 6]
上述代码使用stream()方法将List转换成Stream,然后使用filter方法过滤了所有偶数,最后使用collect(Collectors.toList())方法将过滤后的结果转换成List对象。
2. 映射元素
可以使用map方法将List中的元素映射成另一个对象,例如:
List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengthList = list.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println(lengthList); // [5, 6, 6]
上述代码使用stream()方法将List转换成Stream,然后使用map方法将每个字符串映射成其长度,最后使用collect(Collectors.toList())方法将结果转换成List对象。
3. 排序元素
可以使用sorted方法对List中的元素进行排序,例如:
List<Integer> list = Arrays.asList(5, 3, 1, 4, 2);
List<Integer> sortedList = list.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedList); // [1, 2, 3, 4, 5]
上述代码使用stream()方法将List转换成Stream,然后使用sorted方法对元素进行排序,最后使用collect(Collectors.toList())方法将结果转换成List对象。
4. 聚合元素
可以使用reduce方法对List中的元素进行聚合,例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> sum = list.stream()
.reduce((a, b) -> a + b);
System.out.println(sum.get()); // 15
上述代码使用stream()方法将List转换成Stream,然后使用reduce方法将所有元素累加起来,最后使用get方法获取计算结果。
总之,Stream API提供了丰富的方法和操作,可以极大地简化代码,并且能够提高程序的性能和效率。
Map<String, List<CoreSpaceExcelBo>> map = all.stream().collect(Collectors.groupingBy(p -> p.getSpaceCode()+ "#" + p.getItemCode() + "#" + p.getCartonCode()));根据 CoreSpaceExcelBo对象的CartonCode字段去重,累加CoreSpaceExcelBo中的num字段
这段代码的作用是将一个名为all的列表按照其中元素的SpaceCode属性进行分组,并将分组后的结果保存在一个Map中,其中键值是字符串类型的SpaceCode属性值,值是一个CoreSpaceExcelBo类型的列表。
阅读全文