Map<String, Phone> mapk = phonel.stream().collect(Collectors.toMap(Phone::getName, student -> student));
List<User> usrList = userl.stream().map(o->{ return toFamily(mapk.get(o.getUsrname()),o);}).collect(Collectors.toList());
usrList.stream().forEach(o-> {System.out.println(o.getPhone().getNum());});
以上代碼留着備用。用流的方式 對兩個集合做合併 因爲是demo 隨便寫的對象 一個User 一個Phone 場景就是 根據兩個對象的關聯鍵 一一配對。最終返回 user 集合 。user 中包含Phone 單個屬性賦值一個道理。
好處就是 之前要寫很多很多行的代碼。。現在兩行搞定了。。確實比較好用。
package com.zccpro.demo;
public class User {
private String usrname;
private String passwd;
private Phone phone;
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
public String getUsrname() {
return usrname;
}
public void setUsrname(String usrname) {
this.usrname = usrname;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
package com.zccpro.demo;
public class Phone {
private String name;
private String num;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
}
package com.zccpro.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class CollectionTest {
public static void main(String[] args) {
ArrayList<User> userl = new ArrayList<User>();
ArrayList<Phone> phonel = new ArrayList<Phone>();
User user = new User();
user.setPasswd("p1");
user.setUsrname("u1");
User user2 = new User();
user2.setPasswd("p2");
user2.setUsrname("u2");
userl.add(user);
userl.add(user2);
Phone phone = new Phone();
phone.setName("u1");
phone.setNum("1");
Phone phone2 = new Phone();
phone2.setName("u2");
phone2.setNum("2");
phonel.add(phone);
phonel.add(phone2);
Map<String, Phone> mapk = phonel.stream().collect(Collectors.toMap(Phone::getName, student -> student));
List<User> usrList = userl.stream().map(o->{ return toFamily(mapk.get(o.getUsrname()),o);}).collect(Collectors.toList());
usrList.stream().forEach(o-> {System.out.println(o.getPhone().getNum());});
}
private static User toFamily(Phone phone, User usr) {
usr.setPhone(phone);
return usr;
}
}
參考別人的代碼寫的demo 實際可用。。。自己跑一跑 學的更快
後來實際寫業務時 代碼稍作了修改 如下
usrList = userl.stream().map(o->{o.setPhone(mapk.get(o.getUsrname()));return o;}).collect(Collectors.toList());