Lambda表達式 中 tomap 詳解

1.tomap 轉換 簡單數據轉換【用於沒有重複key值的數據集合】

/** *1.toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper) 【用於沒有重複key值的數據集合】 *1.keyMapper map中key的獲取 *2.valueMapper map中value值的獲取 *///註釋: 把student中的age當keystudent 中的name當 map的value ,如果存在key值相同的捨棄後一條相同的數據取第一條Map<Integer, String> ageMap = students.stream().collect(Collectors.toMap(item -> item.getAge(), item -> item.getName()));ageMap.forEach((k, v) -> System.out.println("k=" + k + "--- value=" + v));/** k=18--- value=小王 k=19--- value=小明 k=20--- value=小飛 k=21--- value=小長 */

2.用於有重複key值的數據集合【常用】

List<Student> students1 = new ArrayList<>();students1.add(new Student("小王", "北京", 18));students1.add(new Student("小明", "湖北", 17));students1.add(new Student("小飛", "深圳", 17));students1.add(new Student("小長", "湖北", 20));/** *2.toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction) 【用於有重複key值的數據集合】 *1.keyMapper map中key的獲取 *2.valueMapper map中value值的獲取 *3.mergeFunction 如果有重複數據 合併規則 *3.0 通過BinaryOperator<U> mergeFunction 函數從k1,k2中取一個 值作為合併規則 *3.1 (k1, k2)->k1) 如果key 相同 保留k1 和k1 value *3.2(k1, k2)->k2) 如果key相同 保留k2 和k2 value * *///註釋: 把student中的age當keystudent 中的name當 map的value ,如果存在key值相同的捨棄後一條相同的數據取第一條Map<Integer, String> ageMap1 = students1.stream().collect(Collectors.toMap(item -> item.getAge(), item -> item.getName(), (k1, k2) -> k1));ageMap1.forEach((k, v) -> System.out.println("k=" + k + "value=" + v));//註釋: 把student中的age當keystudent 中的name當 map的value ,如果存在key值相同的 就通過age比較大小 如果age大的就保留Map<String, Student> nameMap1 = students1.stream().collect(Collectors.toMap(item -> item.getAdress(), item -> item, (k1, k2) -> {return Student.compareTo(k1,k2);}));nameMap1.forEach((k, v) -> System.out.println("k=" + k + "value=" + v));/** *k=湖北value=Student(name=小長, adress=湖北, age=20) k=深圳value=Student(name=小飛, adress=深圳, age=17) k=北京value=Student(name=小王, adress=北京, age=18) */

3.用於有重複key值的數據集合,指定map數據類型

/** *3.toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction,Supplier<M> mapSupplier) 【用於有重複key值的數據集合,指定map數據類型】 *1.keyMapper map中key的獲取 *2.valueMapper map中value值的獲取 *3.mergeFunction 如果有重複數據 合併規則 *3.0 通過BinaryOperator<U> mergeFunction 函數從k1,k2中取一個或者組成一個加工後的新值 值作為合併規則 *3.1 (k1, k2)->k1) 如果key 相同 保留k1 和k1 value *3.2(k1, k2)->k2) 如果key相同 保留k2 和k2 value *4.mapSupplier 指定具體收集的map類型LinkedHashMap ConcurrentHashMap 等 *///註釋: 把student中的age當keystudent 中的name當 map的value ,如果存在key值相同的 就通過age比較大小 如果age大的就保留ConcurrentHashMap<String, Student> nameMap2 = students1.stream().collect(Collectors.toMap(item -> item.getAdress(), item -> item, (k1, k2) -> {return Student.compareTo(k1,k2);}, ConcurrentHashMap::new));System.out.println("nameMap2 數據類型 為="+ (nameMap2 instanceof ConcurrentHashMap));//nameMap2 數據類型 為=truenameMap2.forEach((k, v) -> System.out.println("k=" + k + "value=" + v));

版权声明:Lambda表達式 中 tomap 詳解内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系 删除。

本文链接:https://www.fcdong.com/f/2cb091d25a6a7e514ea4ebdbbd3779d2.html