java 8 stream 實戰案例

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());

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章