jdk 1.8 stream的各種姿勢

2020-10-22 11:00:39
本文沒有對stream效率和原理的探究,只是一些具體的用法範例。

1.遍歷 foreach

entityList.stream().forEach(System.out::println);

2.map,entityList 轉為 map<Long,String> id -> name

Map<Long, String> groupNameMap = groupEntityList.stream().collect(Collectors.toMap(QuestionGroupEntity::getId, QuestionGroupEntity::getGroupName));

3.groupingBy-分組,entityList 轉為 map<Long,List> typeId -> List

Map<Long, List<QuestionDTO>> map = dtoList.stream().collect(Collectors.groupingBy(QuestionDTO::getTypeId));

4.filter-篩選指定條件的集合

dtoList.stream().filter(d -> currentIdSet.contains(d.getId())).collect(Collectors.toList())

5.limit

entityList.stream().limit(2).collect(Collectors.toList());

6.sorted 排序

Comparator.comparing(AnswerDTO::getShowNo)是使用排序器指定具體按什麼欄位排序(正序-從小到大)

 answerDTOList = answerDTOList.stream().sorted(Comparator.comparing(AnswerDTO::getShowNo)).collect(Collectors.toList());

reversed()是倒序

answerDTOList = answerDTOList.stream().sorted(Comparator.comparing(AnswerDTO::getShowNo).reversed()).collect(Collectors.toList());

7.返回值的問題
最後是個使用提醒,使用stream對流進行操作後除非是直接return,否則必須

  • 賦給原集合
list = list.stream()...
  • 使用新集合
newList = list.stream()...
  • 錯誤的寫法
 list.stream()...;
 // 類似作用域問題,list還是原來的沒變化
 return list;