String类型用stream分组求和
时间: 2023-10-30 16:07:52 浏览: 136
可以使用Java 8的Stream API中的groupingBy和summingInt方法对String类型进行分组求和。
首先,假设我们有一个包含String类型的列表,例如:
List<String> strings = Arrays.asList("apple", "banana", "apple", "orange", "banana", "apple");
要对这些字符串进行分组求和,我们可以使用下面的代码:
Map<String, Integer> sumByGroup = strings.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(str -> 1)));
上述代码中,Function.identity()表示使用字符串本身作为分组条件。Collectors.summingInt(str -> 1)表示对每个分组中的元素进行计数。
最终,我们会得到一个Map对象,其中键是字符串,值是该字符串在列表中出现的次数。对于上述示例,结果将是:
{apple=3, banana=2, orange=1}
相关问题
java BigDecimal类型stream分组求和
在Java中,如果你有一个包含`BigDecimal`类型的`Stream`,并且想要按照某些属性进行分组,并计算每个分组的数值总和,可以使用`Stream` API提供的`groupingBy`和`reducing`方法。以下是一个示例:
```java
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
List<BigDecimal> bigDecimalList = ... // 假设这是一个BigDecimal列表
// 使用groupingBy按某个属性分组
Map<String, Stream<BigDecimal>> groupedStream = bigDecimalList.stream()
.collect(Collectors.groupingBy(item -> item.getSomeProperty()));
// 对每个分组求和
Map<String, BigDecimal> sumsPerGroup = groupedStream.entrySet().stream() // 遍历每个分组
.map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue().reduce(BigDecimal.ZERO, BigDecimal::add))) // 求和操作
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); // 将结果映射回一个新的Map
```
这里的`getSomeProperty()`应替换为你实际想用的属性名,比如`getAmount()`如果每个BigDecimal对象有金额属性。上述代码会创建一个新的Map,其中键是分组依据,值是对应分组内BigDecimal的总和。
Java list是String类型用Stream求和
可以使用Java 8的Stream API来实现对String类型的List求和。具体实现如下:
```java
List<String> list = Arrays.asList("1", "2", "3", "4", "5");
int sum = list.stream()
.mapToInt(Integer::parseInt)
.sum();
System.out.println(sum);
```
这里首先将List中的String类型转换成Integer类型,再使用sum()方法进行求和。输出结果为15。
阅读全文