Collectors.groupingBy 怎么保持顺序
时间: 2024-01-30 10:12:24 浏览: 73
JAVA快速统计文章词频.zip
Collectors.groupingBy方法在Java Stream中用于根据给定的分类器对元素进行分组,并返回一个Map对象,其中键是分类器的结果,值是对应的元素列表。默认情况下,Collectors.groupingBy方法返回的Map对象是无序的,即不保证元素的顺序。然而,我们可以通过使用特定的数据结构来保持顺序。
在Java 8中,我们可以使用Collectors.toMap方法来指定返回的Map对象的类型。例如,我们可以使用LinkedHashMap来保持插入顺序:
```java
import java.util.*;
import java.util.stream.Collectors;
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
Map<Integer, List<String>> result = list.stream()
.collect(Collectors.groupingBy(String::length, LinkedHashMap::new, Collectors.toList()));
System.out.println(result);
```
输出结果为:
```
{5=[apple], 6=[banana, cherry], 4=[date], 10=[elderberry]}
```
在Java 9及更高版本中,我们可以使用Collectors.groupingByConcurrent方法来保持顺序。这个方法返回一个ConcurrentMap对象,它是线程安全的,并且保持插入顺序。
```java
import java.util.*;
import java.util.stream.Collectors;
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
Map<Integer, List<String>> result = list.stream()
.collect(Collectors.groupingByConcurrent(String::length));
System.out.println(result);
```
输出结果为:
```
{5=[apple], 6=[banana, cherry], 4=[date], 10=[elderberry]}
```
阅读全文