1. 程式人生 > 程式設計 >Java8處理List的雙層迴圈問題

Java8處理List的雙層迴圈問題

Java處理List的雙層迴圈程式設計師經常遇到,一般都是當兩個List某個值滿足某條件時候,進行相應的處理;

1.list和map之間的相互轉換

/**
 * 兩個List物件當id相同的時候(注意是兩個物件,而非兩個集合)
 * @param husbands
 * @param wives
 */
private static void test8(List<Husband> husbands,List<Wife> wives) {
  List<Family> families = Lists.newArrayList();
  //將wives轉換為map,這裡的key一定要唯一,即為familyId
  Map<Integer,Wife> wifeMap = wives.stream().collect(toMap(w -> w.getFamilyId(),w -> w));
  families = husbands.stream().map(husband -> {
    Family family = new Family();
    Wife wife = wifeMap.get(husband.getFamilyId());
    family.setFamilyId(wife.getFamilyId());
    family.setHusbandName(husband.getHusbandName());
    family.setWifeName(husband.getWifename());
    return family;
  }).collect(Collectors.toList());
}

2.java8中的

groupingBy

counting

mapToDouble

filter

sum等函式方法的使用

//蘋果顏色對應的數量
Map<String,Long> collect = appleVos.stream().collect(groupingBy(AppleVo::getColor,counting()));
// 過濾掉顏色為黑色的蘋果,並彙總好蘋果的總金額
Double sum = appleVos.stream().filter(i -> "black".equals(i.getColor())).mapToDouble(AppleVo::getPrice).sum();

補充知識:java8新技術:資料流式處理之兩個list集合多對多遍歷關聯

自用測試方法

Java8處理List的雙層迴圈問題

說明一下:list1和list2兩個集合進行匹配,將list2中的對應的值取出,使list1中的每條資料都有對應的list2中的name值,list1為主集合,資料需全部展示;

注意:若list1的數量多於list2,並且資料匹配不上,則多出來的會在list3中為null;

以上這篇Java8處理List的雙層迴圈問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。