Collectors.groupingBy分组后返回list集合
时间: 2023-10-15 16:26:45 浏览: 56
Collectors.groupingBy默认情况下分组后返回的是HashMap类型的集合。通过修改为LinkedHashMap类型即可返回LinkedHashMap集合。这样可以保持分组后的顺序不发生乱序。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Collectors.groupingBy分组后乱序问题](https://blog.csdn.net/weixin_43883917/article/details/121502336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
Collectors.groupingBy value不返回list
Collectors.groupingBy是Java 8中的一个用于分组操作的工具类,它可以根据指定的条件将元素分组,并将分组结果存储在一个Map中。默认情况下,Collectors.groupingBy的value会返回一个List,其中包含属于同一组的所有元素。
然而,有时候我们可能希望对分组结果进行其他处理,而不是返回一个List。在这种情况下,我们可以使用Collectors.toSet()方法来替代默认的List,以获取不重复的元素集合。
下面是一个示例代码,演示了如何使用Collectors.groupingBy和Collectors.toSet来实现不返回List的分组操作:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
public class GroupingByExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "orange", "apple", "banana");
// 使用Collectors.groupingBy和Collectors.toSet进行分组操作
Map<String, Set<String>> groupedFruits = fruits.stream()
.collect(Collectors.groupingBy(fruit -> fruit, Collectors.toSet()));
// 输出分组结果
for (Map.Entry<String, Set<String>> entry : groupedFruits.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
```
运行以上代码,输出结果如下:
```
orange: [orange]
banana: [banana]
apple: [apple]
```
可以看到,使用Collectors.toSet()替代默认的List,我们得到了不重复的元素集合作为分组结果。
Collectors.groupingBy 多条件分组
可以使用Collectors.groupingBy方法的重载版本,该版本接受一个Function类型的参数,该参数返回一个由多个属性组成的键,用于对集合进行分组。下面是一个例子,演示如何使用Collectors.groupingBy方法对一个集合进行多条件分组:
```java
Map<String, Map<String, List<Product>>> map = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory, Collectors.groupingBy(Product::getBrand)));
```
上述代码中,首先按照产品类别进行分组,然后在每个类别中再按照品牌进行分组,最终得到一个Map对象,其中键为类别,值为另一个Map对象,该Map对象的键为品牌,值为该品牌下的产品列表。