java stream 统计有多少个相同的
时间: 2024-02-19 16:29:19 浏览: 16
抱歉,我可以回答这个问题。可以使用Java Stream的groupingBy()和count()方法来统计相同元素的数量。具体实现可以参考以下代码:
```
List<String> list = Arrays.asList("a", "b", "c", "a", "b", "d");
Map<String, Long> result = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(result); // 输出:{a=2, b=2, c=1, d=1}
```
上述代码中,我们将List中的元素使用groupingBy()方法分组,然后使用counting()方法统计数量,最终得到一个Map对象,其中键为元素值,值为该元素出现的次数。
相关问题
java使用stream流list转map统计有相同属性的对象例子
下面是一个Java使用Stream流将List转换为Map并统计具有相同属性的对象的示例:
假设有一个Person类,它有两个属性,一个是名字(name),一个是年龄(age)。
首先,创建一个包含Person对象的List:
```java
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 20));
personList.add(new Person("Bob", 25));
personList.add(new Person("Charlie", 30));
personList.add(new Person("David", 30));
```
现在,我们要统计具有相同年龄的人数。我们可以使用Java 8的Stream API来做到这一点。以下是示例代码:
```java
Map<Integer, Long> ageCountMap = personList.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
```
这里,我们使用了`Collectors.groupingBy`方法,该方法接受一个分类函数(这里是Person::getAge),将具有相同键的元素分组到Map的值列表中,并将结果放入Map中。使用`Collectors.counting()`,我们将值列表中的元素计数,并将其作为值放入Map中。
现在,我们可以使用ageCountMap来获取每个年龄的人数:
```java
System.out.println(ageCountMap);
```
输出:
```
{20=1, 25=1, 30=2}
```
这表示20岁有1个人,25岁有1个人,30岁有2个人。
stream根据某个字段统计list中的数量Java代码
可以使用Java 8的Stream API来实现根据某个字段统计list中的数量。假设有一个名为Person的类,其中包含一个名为age的属性,我们可以按照age字段来统计list中相同age值的数量。示例代码如下:
```java
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 30),
new Person("Charlie", 20),
new Person("David", 30),
new Person("Eva", 20)
);
Map<Integer, Long> countByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
System.out.println(countByAge);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
输出结果为:
```
{20=3, 30=2}
```
这表示list中有3个年龄为20的人,2个年龄为30的人。