java collector的錯(cuò)誤使用案例

小樊
86
2024-07-12 17:44:13
欄目: 編程語言

  1. 錯(cuò)誤使用案例:忽略了類型參數(shù)
List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Set<String> set = list.stream()
        .collect(Collectors.toSet());

這里將一個(gè)List轉(zhuǎn)換為Set時(shí),沒有指定Collectors.toSet()的類型參數(shù),導(dǎo)致編譯器無法推斷出正確的類型,會(huì)報(bào)錯(cuò)。

正確的做法是指定類型參數(shù):

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

這里將一個(gè)List轉(zhuǎn)換為Map<String, Integer>時(shí),卻使用了錯(cuò)誤的收集器Collectors.toList(),應(yīng)該使用Collectors.toMap()。

List<String> list = Arrays.asList("Apple", "Banana", "Orange");
Map<String, Integer> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), String::length));
  1. 錯(cuò)誤使用案例:未處理重復(fù)鍵的情況
List<String> list = Arrays.asList("Apple", "Banana", "Orange", "Apple");
Map<String, Integer> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), String::length));

這里將一個(gè)List轉(zhuǎn)換為Map<String, Integer>時(shí),存在重復(fù)的鍵"Apple",沒有處理重復(fù)鍵的情況會(huì)導(dǎo)致運(yùn)行時(shí)異常。

正確的做法是處理重復(fù)鍵的情況,可以通過提供一個(gè)合并函數(shù)來解決:

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