package com;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author: baifan
* @date: 2021/3/4
*/
public class CoupleTest {
class Couple {
Integer familyId;
String userName;
public Couple(Integer familyId, String userName) {
this.familyId = familyId;
this.userName = userName;
}
public Integer getFamilyId() {
return familyId;
}
public void setFamilyId(Integer familyId) {
this.familyId = familyId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
@Test
public void test() {
test1();
test2();
}
public void test1() {
long startTime = System.nanoTime();
// 老公组
List<Couple> husbands = new ArrayList<>();
husbands.add(new Couple(1, "梁山伯"));
husbands.add(new Couple(2, "牛郎"));
husbands.add(new Couple(3, "干将"));
husbands.add(new Couple(4, "工藤新一"));
husbands.add(new Couple(5, "罗密欧"));
// 老婆组
List<Couple> wives = new ArrayList<>();
wives.add(new Couple(1, "祝英台"));
wives.add(new Couple(2, "织女"));
wives.add(new Couple(3, "莫邪"));
wives.add(new Couple(4, "毛利兰"));
wives.add(new Couple(5, "朱丽叶"));
// 给女嘉宾发牌子
Map<Integer, Couple> wivesMap = new HashMap<>();
for (Couple wife : wives) {
// 女嘉宾现在不在List里了,而是去了wivesMap中,前面放了一块牌子:男嘉宾的号码
wivesMap.put(wife.getFamilyId(), wife);
}
// 男嘉宾上场
for (Couple husband : husbands) {
// 找到举着自己号码牌的女嘉宾
Couple wife = wivesMap.get(husband.getFamilyId());
System.out.println(husband.getUserName() + "爱" + wife.getUserName());
}
System.out.println("----------------------");
System.out.println("map映射消耗时间" + (System.nanoTime() - startTime));
}
public void test2() {
long startTime = System.nanoTime();
// 老公组
List<Couple> husbands = new ArrayList<>();
husbands.add(new Couple(5, "罗密欧"));
husbands.add(new Couple(4, "工藤新一"));
husbands.add(new Couple(3, "干将"));
husbands.add(new Couple(2, "牛郎"));
husbands.add(new Couple(1, "梁山伯"));
// 老婆组
List<Couple> wives = new ArrayList<>();
wives.add(new Couple(1, "祝英台"));
wives.add(new Couple(2, "织女"));
wives.add(new Couple(3, "莫邪"));
wives.add(new Couple(4, "毛利兰"));
wives.add(new Couple(5, "朱丽叶"));
String collect = husbands.parallelStream()
.flatMap(husbands1 -> wives.stream()
.filter(wives1 -> husbands1.getFamilyId().equals(wives1.getFamilyId()))
.map(wives1 -> husbands1.getUserName() + "爱" + wives1.getUserName()))
.collect(Collectors.joining("\r\n"));
System.out.println(collect);
System.out.println("----------------------");
System.out.println("stream消耗时间" + (System.nanoTime() - startTime));
}
}
运行结果