温馨提示×

java collector的错误使用案例

小樊
88
2024-07-12 17:44:13
栏目: 编程语言

  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));

0