Java開發手冊-集合處理
阿新 • • 發佈:2021-06-16
- 關於 hashCode 和 equals 的處理
- 判斷所有集合內部的元素是否為空,使用 isEmpty()方法
- 在使用 java.util.stream.Collectors 類的 toMap()方法轉為 Map 集合時,一定要使 用含有引數型別為 BinaryOperator
1.【強制】關於 hashCode 和 equals 的處理,遵循如下規則:
1) 只要覆寫 equals,就必須覆寫 hashCode。 2) 因為 Set 儲存的是不重複的物件,依據 hashCode 和 equals 進行判斷,所以 Set 儲存的物件必須覆寫 這兩種方法。 3) 如果自定義物件作為 Map 的鍵,那麼必須覆寫 hashCode 和 equals。Map<String, Object> map = new HashMap<>(16); if(map.isEmpty()) { System.out.println("no element in this map."); }3.【強制】在使用 java.util.stream.Collectors 類的 toMap()方法轉為 Map 集合時,一定要使
List<Pair<String, Double>> pairArrayList = new ArrayList<>(3); pairArrayList.add(new Pair<>("version", 12.10)); pairArrayList.add(new Pair<>("version", 12.19)); pairArrayList.add(new Pair<>("version", 6.28)); Map<String, Double> map = pairArrayList.stream().collect( // 生成的 map 集合中只有一個鍵值對:{version=6.28} Collectors.toMap(Pair::getKey, Pair::getValue, (v1, v2) -> v2));
Pair<T1, T2> 定義如下:
class Pair<T1, T2> { private T1 key; private T2 value; public Pair(T1 t11, T2 t22) { super(); this.key = t11; this.value = t22; } public T1 getKey() { return key; } public void setKey(T1 key) { this.key = key; } public T2 getValue() { return value; } public void setValue(T2 value) { this.value = value; } }View Code
當這樣寫時,報錯 java.lang.IllegalStateException: Duplicate key 12.1
Map<String, Double> map = pairArrayList.stream().collect(
Collectors.toMap(Pair::getKey, Pair::getValue));
反例,下面也會報 IllegalStateException:
String[] departments = new String[] {"iERP", "iERP", "EIBU"}; // 丟擲 IllegalStateException 異常 Map<Integer, String> map = Arrays.stream(departments) .collect(Collectors.toMap(String::hashCode, str -> str));