stream流分组后 求和转map
在Java中,Stream API 提供了一种方便的方式来处理数据集合,并可以对数据进行分组、转换和聚合操作。当你想要按照某个键将数据分组并计算每个组的和,然后将结果存储到Map中,你可以这样做:
import java.util.*;
import java.util.stream.Collectors;
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// 使用Collectors.groupingBy和sum方法创建一个Map,键是数字除以3的余数,值是对应组内元素的和
Map<Integer, Long> sumMap = numbers.stream()
.collect(Collectors.groupingBy(
// 分组函数,这里取整数部分作为键
Math.floorMod(number, 3),
// 计算每个组的和
Collectors.reducing(0, Integer::sum)
));
System.out.println(sumMap);
上述代码首先将数字列表按其除以3的余数进行分组,然后对于每个组,通过Collectors.reducing
收集器计算所有元素的和。运行后,你会得到一个Map<Integer, Long>
,如{0 -> 15, 1 -> 15, 2 -> 15}
。
stream流先分组后 金额字段求和 转成 map
在Java中,如果你有一个集合(例如List
import java.util.*;
import java.util.stream.Collectors;
class BankTransaction {
String accountId;
double amount;
// constructor, getters and setters...
}
List<BankTransaction> transactions = ... // 假设这是你的交易列表
Map<String, Double> accountSums = transactions.stream()
.collect(Collectors.groupingBy(BankTransaction::getAccountId, Collectors.reducing(0.0, BankTransaction::getAmount, Double::sum));
// 现在accountSums是一个map,键是账户ID,值是对应账户的所有交易金额之和
在这个例子中,Collectors.groupingBy()
方法用于按照账户ID对交易进行分组,Collectors.reducing()
方法则在每个组内对金额进行累加,初始值为0.0,Double::sum
是提供给reduce的二元操作供对double值进行相加。
stream流分组求和
可以使用Java 8的流(Stream)来实现流分组求和。以下是一个示例代码:
假设有一个Person类,包含姓名(name)、年龄(age)和城市(city)三个属性。
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", 20, "New York"),
new Person("Bob", 30, "New York"),
new Person("Charlie", 25, "London"),
new Person("David", 35, "London")
);
// 按城市分组,并计算每个城市的年龄总和
Map<String, Integer> cityAgeSumMap = persons.stream()
.collect(Collectors.groupingBy(Person::getCity,
Collectors.summingInt(Person::getAge)));
System.out.println(cityAgeSumMap);
// 输出:{London=60, New York=50}
}
}
class Person {
private String name;
private int age;
private String city;
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// getter和setter方法省略
public String toString() {
return name + " (" + age + ") - " + city;
}
}
在上面的代码中,我们使用Collectors.groupingBy()
方法将Person对象按城市分组,然后使用Collectors.summingInt()
方法计算每个城市的年龄总和。最终得到一个Map,其中键为城市名,值为该城市的年龄总和。
如果您有任何疑问,请随时问我。
相关推荐
















