温馨提示×

java collector的错误使用案例

小樊
92
2024-07-12 17:44:13
栏目: 编程语言
Java开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

  1. 错误使用案例:忽略了类型参数
List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Set<String> set = list.stream()
        .collect(Collectors.toSet());

这里将一个List转换为Set时,没有指定Collectors.toSet()的类型参数,导致编译器无法推断出正确的类型,会报错。

正确的做法是指定类型参数:

List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Set<String> set = list.stream()
        .collect(Collectors.toSet());
  1. 错误使用案例:使用错误的收集器
List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Map<String, Integer> map = list.stream()
        .collect(Collectors.toList());

这里将一个List转换为Map<String, Integer>时,却使用了错误的收集器Collectors.toList(),应该使用Collectors.toMap()。

List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Map<String, Integer> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), String::length));
  1. 错误使用案例:未处理重复键的情况
List<String> list = Arrays.asList("Apple", "Banana", "Orange", "Apple");
Map<String, Integer> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), String::length));

这里将一个List转换为Map<String, Integer>时,存在重复的键"Apple",没有处理重复键的情况会导致运行时异常。

正确的做法是处理重复键的情况,可以通过提供一个合并函数来解决:

List<String> list = Arrays.asList("Apple", "Banana", "Orange", "Apple");
Map<String, Integer> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), String::length, (existing, replacement) -> existing));

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:java collector性能优化的策略

0