List.stream().collect(Collectors.toMap(Emp::getId, a->a,(k1,k2)->k2))的意義是:將鏈表里的元素轉成Map,Map的鍵取元素的id,值就取元素本身,當鍵同值不同時取后來者。
例程:
Emp類:
public class Emp { private String id; private String name; public Emp(String id,String name) { this.id=id; this.name=name; } public String toString() { return this.id+"/"+this.name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
程序:
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Test2 { public static void main(String[] args) { List<Emp> emps=new ArrayList<>(); emps.add(new Emp("1","Andy")); emps.add(new Emp("2","Bill")); emps.add(new Emp("3","Cindy")); emps.add(new Emp("4","Douglas")); emps.add(new Emp("4","Eliot")); //Emp::getId Map的key取元素的id //a->a Map的值取整體 //(k1,k2)->k2) 兩鍵相同值不同時時取后來的值 Map<String,Object> map=emps.stream().collect(Collectors.toMap(Emp::getId, a->a,(k1,k2)->k2)); for(String key:map.keySet()) { System.out.println(key+":"+map.get(key)); } } }
輸出:
1:1/Andy 2:2/Bill 3:3/Cindy 4:4/Eliot
參考資料:
