list 與lambda

lambda 各種操作list 合集

使用hibernate validator出現(xiàn)上面的錯誤齐苛, 需要 注意
@NotNull 和 @NotEmpty  和@NotBlank 區(qū)別
@NotEmpty 用在集合類上面
@NotBlank 用在String上面
@NotNull    用在基本類型上
在枚舉類上不要加非空注解

日期排序

升序
msgList.sort((Message m1, Message m2) -> m2.getSendDate().compareTo(m1.getSendDate()));

降序
msgList.sort(Comparator.comparing(Message::getSendDate, Comparator.nullsLast(Date::compareTo)));

交集剿骨、并集静陈、差集

 // 交集
List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(toList());
System.out.println("---得到交集 intersection---");
intersection.parallelStream().forEach(System.out :: println);

// 差集 (list1 - list2)
List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList()); System.out.println("---得到差集 reduce1 (list1 - list2)---");
reduce1.parallelStream().forEach(System.out :: println);

// 差集 (list2 - list1)
List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());
System.out.println("---得到差集 reduce2 (list2 - list1)---");
reduce2.parallelStream().forEach(System.out :: println);

 // 并集
 List<String> listAll = list1.parallelStream().collect(toList());
List<String> listAll2 = list2.parallelStream().collect(toList());
 listAll.addAll(listAll2);
 System.out.println("---得到并集 listAll---");
 listAll.parallelStream().forEach(System.out :: println);

 // 去重并集
List<String> listAllDistinct = listAll.stream().distinct().collect(toList());
System.out.println("---得到去重并集 listAllDistinct---"); listAllDistinct.parallelStream().forEach(System.out :: println);

System.out.println("---原來的List1---");
list1.parallelStream().forEach(System.out :: println);
System.out.println("---原來的List2---");
list2.parallelStream().forEach(System.out :: println);

// 一般有filter 操作時蓬网,不用并行流parallelStream ,如果用的話可能會導(dǎo)致線程安全問題

id相同賦值

List<UserCourseKnowledgeDetailVO> finalList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(validityList)){
    validityList.forEach(operateCourseKnowledgeUserValidity->
            userCourseKnowledgeDetailVOList.stream()
                    .filter(userCourseKnowledgeDetailVO->userCourseKnowledgeDetailVO.getId().equals(operateCourseKnowledgeUserValidity.getKnowledgeId()))
                    .forEach(userCourseKnowledgeDetailVO-> userCourseKnowledgeDetailVO.setLastLearnTime(operateCourseKnowledgeUserValidity.getUpdateTime()))
    );

排除自己

排除自己
list = list.stream().filters -> !"a".equals(s)).collect(Collectors.toList());

return Optional.ofNullable(matchRole).map(MatchRole::getInitScore).orElse(null);
MAP TO LONG
 String ids= "1,2,3,4,5,6";  
 List<Long> listIds = Arrays.asList(ids.split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());  
 System.out.println(Arrays.toString(listIds .toArray()));//[1,2,3,3,4,5,6]  

去重

List<String> dataList = list.stream().distinct().collect(Collectors.toList());


//根據(jù)id去重
personList = personList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                // 利用 TreeSet 的排序去重構(gòu)造函數(shù)來達(dá)到去重元素的目的
                // 根據(jù)firstName去重
                () -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new));

取幾條排序

//取學(xué)習(xí)時長最大的兩條 從高到低排序
List<OperateCourseKnowledgeUserValidity> topTwoList = list.stream()
        .sorted(Comparator.comparing(OperateCourseKnowledgeUserValidity::getStudyTimes).reversed())
        .limit(2)
        .collect(Collectors.toList());

分組院溺,遍歷分組

     //分組
        Map<String, List<User>> groupBySex = userList.stream().collect(Collectors.groupingBy(User::getSex));
        //遍歷分組
        for (Map.Entry<String, List<User>> entryUser : groupBySex.entrySet()) {
            String key = entryUser.getKey();
            List<User> entryUserList = entryUser.getValue();
        }

合并userId 相同的courseNum

/**
 * 合并userId 相同的courseNum
 * @param oldList
 * @return
 */
public static List<UserCourseTimeStatisVO> getNewList(List<UserCourseTimeStatisVO> oldList) {
    HashMap<Long, UserCourseTimeStatisVO> tempMap = new HashMap<Long, UserCourseTimeStatisVO>();

    // 去掉重復(fù)的key
    for (UserCourseTimeStatisVO userCourseTimeStatisVO : oldList) {
        Long userId = userCourseTimeStatisVO.getUserId();
        // containsKey(Object key)該方法判斷Map集合中是否包含指定的鍵名楣嘁,如果包含返回true,不包含返回false
        // containsValue(Object value)該方法判斷Map集合中是否包含指定的鍵值珍逸,如果包含返回true逐虚,不包含返回false
        if (tempMap.containsKey(userId)) {
            UserCourseTimeStatisVO newList = new UserCourseTimeStatisVO();
            newList.setUserId(userId);
            // 合并相同key的value
            newList.setCourseNum(tempMap.get(userId).getCourseNum() + userCourseTimeStatisVO.getCourseNum());
            // HashMap不允許key重復(fù),當(dāng)有key重復(fù)時谆膳,前面key對應(yīng)的value值會被覆蓋
            tempMap.put(userId, newList);
        } else {
            tempMap.put(userId, userCourseTimeStatisVO);
        }
    }
    List<UserCourseTimeStatisVO> newList = new ArrayList<UserCourseTimeStatisVO>();
    Iterator iter = tempMap.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry entry = (Map.Entry) iter.next();
        UserCourseTimeStatisVO newPerson = (UserCourseTimeStatisVO) entry.getValue();
        newList.add(newPerson);
    }
    return newList;
}

獲取屬性

 List<Integer> idList = list1.stream().map(User::getId).collect(Collectors.toList());

 List<User> userList1 = list1.stream().filter(user2 -> idList.contains(user2.getId())).collect(Collectors.toList());
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叭爱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子漱病,更是在濱河造成了極大的恐慌买雾,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杨帽,死亡現(xiàn)場離奇詭異漓穿,居然都是意外死亡,警方通過查閱死者的電腦和手機注盈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門晃危,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人老客,你說我怎么就攤上這事僚饭≌鸲#” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵鳍鸵,是天一觀的道長苇瓣。 經(jīng)常有香客問我,道長权纤,這世上最難降的妖魔是什么钓简? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮汹想,結(jié)果婚禮上外邓,老公的妹妹穿的比我還像新娘。我一直安慰自己古掏,他們只是感情好损话,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著槽唾,像睡著了一般丧枪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庞萍,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天拧烦,我揣著相機與錄音,去河邊找鬼钝计。 笑死恋博,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的私恬。 我是一名探鬼主播债沮,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼本鸣!你這毒婦竟也來了疫衩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荣德,失蹤者是張志新(化名)和其女友劉穎闷煤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涮瞻,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡曹傀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饲宛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗜价,死狀恐怖艇抠,靈堂內(nèi)的尸體忽然破棺而出幕庐,到底是詐尸還是另有隱情,我是刑警寧澤家淤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布异剥,位于F島的核電站,受9級特大地震影響絮重,放射性物質(zhì)發(fā)生泄漏冤寿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一青伤、第九天 我趴在偏房一處隱蔽的房頂上張望督怜。 院中可真熱鬧,春花似錦狠角、人聲如沸号杠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姨蟋。三九已至,卻和暖如春立帖,著一層夾襖步出監(jiān)牢的瞬間眼溶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工晓勇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堂飞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓宵蕉,卻偏偏與公主長得像酝静,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子羡玛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容