java8对象用一个字段分组,统计另外一个字段的总数
时间: 2024-05-08 17:21:12 浏览: 97
假设我们有一个对象列表,包含两个字段:name 和 count。我们想要按照 name 字段进行分组,并统计每组 count 字段的总数。可以使用 Java 8 的 Stream API 来实现:
```java
List<MyObject> list = ...; // 假设我们有一个对象列表
Map<String, Integer> result = list.stream()
.collect(Collectors.groupingBy(MyObject::getName,
Collectors.summingInt(MyObject::getCount)));
```
上述代码中,我们使用 `Collectors.groupingBy` 方法对对象列表进行分组,按照 name 字段进行分组,得到一个 Map,其中键为 name 字段的值,值为该分组内所有对象的列表。然后使用 `Collectors.summingInt` 方法对每个分组内的 count 字段进行求和,得到每个分组的 count 字段的总和。最终得到一个 Map,其中键为 name 字段的值,值为该分组的 count 字段的总和。
相关问题
java8对象统计相同字段的总数
假设有一个包含多个对象的列表,每个对象都有一个字段,需要统计这个字段相同的对象的总数,可以使用Java 8中的Stream API来实现。
假设要统计的字段为属性名为"fieldName",对象类型为"Object",则可以使用以下代码:
```
Map<Object, Long> countMap = objectList.stream()
.collect(Collectors.groupingBy(Object::getFieldName, Collectors.counting()));
```
这将返回一个Map对象,其中键是字段值,值是该字段值出现的次数。可以通过遍历Map对象来获取每个字段值的总数。
java8 stream统计某个字段总数
要统计Java 8 Stream中某个字段的总数,可以使用`mapToInt()`方法将该字段转换为整数流,然后使用`sum()`方法对整数流进行求和。
下面是一个示例代码:
```java
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("John", 25),
new Person("Jane", 30),
new Person("Bob", 20),
new Person("Alice", 35)
);
int totalAge = persons.stream()
.mapToInt(Person::getAge) // 将年龄字段转换为整数流
.sum(); // 对整数流求和
System.out.println("Total age: " + totalAge);
}
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
}
}
```
在上述示例中,我们有一个`Person`类,其中包含姓名和年龄字段。我们创建了一个包含几个`Person`对象的列表。通过使用`stream()`方法获取列表的流,然后使用`mapToInt()`方法将年龄字段转换为整数流,并最后使用`sum()`方法对整数流进行求和,得到了年龄字段的总和。输出结果为:
```
Total age: 110
```
请注意将代码中的`Person`类替换为您实际使用的类,并相应地更改`mapToInt()`方法中的字段引用。
阅读全文