stream条件求和
时间: 2023-09-28 17:07:58 浏览: 307
stream条件求和,可以通过遍历流中的元素,并根据给定的条件进行累加求和。下面是一个示例代码,假设流中的元素为整数:
```java
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = stream.filter(num -> num % 2 == 0) // 过滤条件,只保留偶数
.mapToInt(Integer::intValue) // 转换为基本类型int
.sum(); // 求和
System.out.println("Sum: " + sum); // 输出结果
}
}
```
在上述代码中,首先创建了一个包含整数的流 `stream`。然后使用 `filter` 方法过滤掉不符合条件的元素(这里只保留偶数),接着使用 `mapToInt` 方法将流中的元素转换为基本类型 `int`,最后使用 `sum` 方法求和。在示例中,最终输出的结果是偶数的和。
你可以根据自己的需求修改过滤条件和流中的元素类型,以满足不同的求和需求。
相关问题
list使用stream分组求和
使用Java 8的Stream可以很方便地对List进行分组求和。首先,我们需要使用Collectors.groupingBy()对List中的元素进行分组,指定分组的条件。然后,使用Collectors.summingLong()对分组后的元素进行求和操作。下面是一个示例代码片段:
```java
// 分组求和
Map<String, Long> sumByType = list.stream()
.collect(Collectors.groupingBy(Fruit::getType, Collectors.summingLong(Fruit::getTotal)));
// 输出结果
for (Map.Entry<String, Long> entry : sumByType.entrySet()) {
System.out.println("类型:" + entry.getKey() + ",求和:" + entry.getValue());
}
```
在上面的代码中,`list`是一个包含`Fruit`对象的List,我们根据`Fruit`对象的`getType()`方法对元素进行分组,并使用`getTotal()`方法对元素进行求和。最后,通过遍历Map的方式将分组后的结果输出。
请注意,这里假设`Fruit`类有`getType()`和`getTotal()`方法,分别返回水果的类型和总数。你可以根据实际情况进行调整。
String类型用stream分组求和
可以使用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}
阅读全文