两个集合匹配算法
@Test
public void testCouple2() {
// 用于计算循环次数
int count = 0;
// 老公组
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> wifeMap = new HashMap<>();
for (Couple couple : wives){
wifeMap.put(couple.getFamilyId(),couple);
count ++;
}
for (Couple couple : husbands){
log.info("{}爱{}",couple.getUserName(),wifeMap.get(couple.getFamilyId()).getUserName());
count ++;
}
System.out.println(count);
}
使用一个Map对另一个List的元素进行编号。遍历list是通过编号直接获取
可应用于二级联动的场景 比如:城市、部门等
List转Map ----工具类(lamda表达式)
// 第一个参数为用Person的name属性做key,map的value直接用list里面的属性 ,当有多个key值相等时取第一个value值
list.stream().collect(Collectors.toMap(Person::getName, v -> v,(v1,v2) -> v1));
lambda表达式中Function<V, K> keyExtractor K key = keyExtractor.apply(element);
相当于element.getName()
// person -> person.getAge() >= 18
Predicate<V> predicate predicate.test(element) 相当于 element == true