java l利用Collectors.groupingBy分组并遍历分组后的值
时间: 2023-06-02 22:07:11 浏览: 529
好的,这是一个关于Java语言的技术问题,我可以回答。可以使用Collectors.groupingBy方法进行分组,然后使用Map.forEach方法遍历分组后的值。具体操作可以参考以下示例代码:
```
List<String> list = Arrays.asList("apple", "banana", "cat", "dog", "egg", "fan");
Map<Integer, List<String>> result = list.stream().collect(Collectors.groupingBy(String::length));
result.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
```
这段代码将list中的元素按照字符长度分组,并输出分组后的结果。
相关问题
Collectors.groupingBy按照list分组
Collectors.groupingBy是Java 8中Stream API提供的一个工具类,用于根据指定的分类函数将一个List中的元素分组为多个不同的组,每组内部元素的值相同。使用该工具类可以实现非常方便和简洁的分组操作,而不需要手动遍历整个List。
下面是一个简单的例子,展示如何使用Collectors.groupingBy对一个List<Person>进行分组:
```
List<Person> people = ...;
Map<String, List<Person>> groups = people.stream()
.collect(Collectors.groupingBy(Person::getName));
```
这里,我们使用了Person::getName作为分组函数,表示根据Person对象的name属性将所有Person对象分为多个组。最终,groups变量将会存储分组结果,其中key为name属性的值,value为该组内所有Person对象的List。
Collectors.groupingBy List<?>
Collectors.groupingBy(List<?>)是Java 8中的一个用于分组的收集器(Collector)。它可以将一个列表(List)中的元素按照指定的条件进行分组,并将分组结果存储在一个Map中。
具体来说,Collectors.groupingBy(List<?>)方法接受一个Function作为参数,该函数用于根据元素的某个属性或条件进行分组。它会遍历列表中的每个元素,并根据指定的条件将元素分配到对应的分组中。
下面是一个示例代码,演示了如何使用Collectors.groupingBy(List<?>)方法对一个Person对象列表按照年龄进行分组:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
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;
}
}
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 25),
new Person("Charlie", 20),
new Person("David", 25)
);
Map<Integer, List<Person>> groupedByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge));
System.out.println(groupedByAge);
}
}
```
运行以上代码,输出结果为:
```
{20=[Person{name='Alice', age=20}, Person{name='Charlie', age=20}], 25=[Person{name='Bob', age=25}, Person{name='David', age=25}]}
```
可以看到,根据年龄进行分组后,年龄为20的人有两个(Alice和Charlie),年龄为25的人也有两个(Bob和David)。
阅读全文