1. 程式人生 > >java8 將List轉換為Map

java8 將List轉換為Map

1 準備資料

Employee物件:

package com.tao.springstarter.entity;

public class Employee {

    /**
     * 姓名
     */
    private String name;

    /**
     * 年齡
     */
    private Integer age;

    /**
     * 所在城市
     */
    private String city;

    /**
     * 銷售額
     */
    private Double sales;

    public Employee
(String name, Integer age, String city, Double sales) { this.name = name; this.age = age; this.city = city; this.sales = sales; } public String getName() { return name; } public void setName(String name) { this.name = name; } public
Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public Double getSales() { return sales; }
public void setSales(Double sales) { this.sales = sales; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", city='" + city + '\'' + ", sales=" + sales + '}'; } }

List<Employee>物件:

	List<Employee> employeeList = new ArrayList<>();
	employeeList.add(new Employee("Alice", 23, "London", 1200.00));
	employeeList.add(new Employee("Bob", 19, "London", 2000.00));
	employeeList.add(new Employee("Charles", 25, "New York", 1650.00));
	employeeList.add(new Employee("Dorothy", 20, "Hong Kong", 1200.00));

2 ListMap

2.1 Collectors.toMap函式說明

ListMap 通常使用 Collectors.toMap 函式進行轉換。在Collectors中,toMap總共有三種形態:

2.1.1 第一種

    public static <T, K, U>
    Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper) {
        return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
    }

其中,

  • keyMapper —— 指定map中的鍵的獲取方法。
  • valueMapper —— 指定map中的值的獲取方法。
  • 預設使用HashMapMap的實現類,當鍵值相同發生衝突時,丟擲異常。

栗子:

(1)

	// key - name, value - Employee
	Map<String, Employee> map1 = employeeList.stream()
				.collect(toMap(Employee::getName, Function.identity()));

(2)

	// key - name, value - age
	Map<String, Integer> map2 = employeeList.stream()
                .collect(toMap(Employee::getName, Employee::getAge));

2.1.2 第二種(提供解決key衝突的策略)

    public static <T, K, U>
    Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper,
                                    BinaryOperator<U> mergeFunction) {
        return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
    }

其中,

  • keyMapper —— 指定map中的鍵的獲取方法。
  • valueMapper —— 指定map中的值的獲取方法。
  • mergeFunction —— 指定key衝突時,儲存value的策略。
  • 預設使用HashMapMap的實現類。

栗子:

(1)key衝突時,捨棄value的舊值,使用value的新值。

	// key - city, value - name
	Map<String, String> map3 = employeeList.stream()
                .collect(toMap(Employee::getCity, Employee::getName, (oldValue, newValue) -> newValue));

2.1.3 第三種(提供指定Map實現類的策略)

    public static <T, K, U, M extends Map<K, U>>
    Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
                                Function<? super T, ? extends U> valueMapper,
                                BinaryOperator<U> mergeFunction,
                                Supplier<M> mapSupplier) {
        BiConsumer<M, T> accumulator
                = (map, element) -> map.merge(keyMapper.apply(element),
                                              valueMapper.apply(element), mergeFunction);
        return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
    }

其中,

  • keyMapper —— 指定map中的鍵的獲取方法。
  • valueMapper —— 指定map中的值的獲取方法。
  • mergeFunction —— 指定key衝突時,儲存value的策略。
  • mapSupplier —— 指定Map的實現類。

栗子:

(1)使用LinkedHashMapMap的實現類

	// key - city, value - name, use LinkedHashMap
	Map<String, String> map4 = employeeList.stream()
                .collect(toMap(Employee::getCity, Employee::getName, (oldValue, newValue) -> newValue, LinkedHashMap::new));

相關推薦

java8 List轉換Map

1 準備資料 Employee物件: package com.tao.springstarter.entity; public class Employee { /** * 姓名

Java 三種list轉換map的方法詳解

在本文中,介紹三種將list轉換為map的方法: 1) 傳統方法 假設有某個類如下  class Movie { private Integer rank; private String description; public

Java8list轉換逗號隔開的字串

/** * @Description: 把list轉換為逗號分隔的字串 * * @param list * @Return: java.lang.String * @Author: XXX * @Date: 2018/11/15 */ public static String list

Java 8 – Convert List to Map List 轉換 Map

   幾個Java 8的例子展示怎樣將一個 物件的集合(List)放入一個Map中,並且展示怎樣處理多個重複keys的問題。 Hosting.java package com.mkyong.java8 public class Hosting { priva

java list轉換map 的泛型通用方法

將list轉換為map 背景:最近使用比較多的mongodb,由於其缺乏表連線的查詢,導致我們經常需要將表資料查詢到記憶體中,然後進行匹配連線,組成需要的資料格式,匹配的方式通常是: list1中有list2需要的欄位,於是將list1轉換為map,遍歷list2,從ma

List轉換Json物件

將List轉換為Json物件,分別有兩個Json的jar包: 1、org.json.JSONArray包 2、net.sf.json.JSONArray包 兩個JSONArray分別實現方式: 1、org.json.JSONArray包 List al

處理list 轉換json,js時間顯示毫秒數問題

1.後臺將一個list轉換為json HttpServletResponse response = getResponse();         response.setContentType("text/json;charset=utf-8");         Prin

如何利用fastjsonJSON格式的字符串轉換Map,再返回至前端成為js對象

數據結構 mem spring css 轉換 ring 註意 hash 結構 //註意,這裏的jsonStr是json格式的字符串,裏面如果遇到雙引號嵌套雙引號的,一般是嵌套的雙引號經過轉義 // \",假如有這樣的一個場景,這些字符串裏面有需要的css樣式的js對象

利用反射xml轉換List<Object>

反射 uppercase 效率 code varchar2 對象 測試的 trac getname 在將xml轉為實體類的時候,一直對於類型為Integer, date等的很難處理, 無法轉換, 但是後來我發現通過反射可以解決這一問題, 下面和大家分享一下 首先: 給

通過反射Datetable轉換泛型List<T>

tty eof urn tin CA ring nbsp AD 泛型集合 // 定義集合 List<T> ts = new List<T>(); // 獲得此模型的類型

快速List物件、Map物件或者普通普通物件轉換成json字串

package test; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.Iterator; import java

Java8-如何List轉變逗號分隔的字串

Converting a List to a String with all the values of the List comma separated in Java 8 is really straightforward. Let’s have a look how

Spark專案實戰-資料傾斜解決方案之reduce join轉換map join

一、reduce端join操作原理 二、map端join操作原理  三、適用場景 如果兩個RDD要進行join,其中一個RDD是比較小的。一個RDD是100萬資料,一個RDD是1萬資料。(一個RDD是1億資料,一個RDD是100萬資料) 其中一個RDD必須是比較

java 使用PropertyUtilsBean泛型T轉換Map

包名:commons-beanutils-1.9.3.jar 類名:org.apache.commons.beanutils.PropertyUtilsBean.PropertyUtilsBean() 轉換程式碼: private <T> Map<String, Obj

hibernate,原生SQL執行的結果轉換Map

核心:設定處理查詢結果的策略query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP),表示將結果轉換為Map型別預設結果是[“張三”,20],加了Transformers.ALIAS_TO_ENTITY_MAP之

Java 8 Stream轉換List

Java8Example1.java package com.mkyong.java8; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Ja

json 陣列轉換Map 物件;[{}]此類字串 則返回的物件的map

 public Map<String, Object> getMap(String data){          Map<String, Object> valueMap = new HashMap<String, Object>()

【Python】如何generator轉換list

使用 list() 函式。舉個例子:real_test_raw = ['第一段文字','這是第二段','第三段文字']     real_documents = [(jieba.cut(item_tex

Java用OpenOfficeword轉換PDF

sts pre 成功 accep 存在 china ati url 基礎 本文在原文的基礎上有所修改,原文請參考: http://titanseason.iteye.com/blog/1471606 由於此blog不支持附件附件請到此處下載 http://my.oschin

C# HTML 轉換圖片或 PDF

ont gif completed 字段 sed pad cli 滾動條 lose 首先是把 HTML 轉換為圖片。 public partial class Form1 : Form { public Form1() {