java8的stream流能完美解對象集合去重問題
記錄自己在工作中經常使用到的lambda表達式寫法,lambda表達式極大的簡化了代碼,讓整個代碼的排班更加精簡突顯風格,但是卻也增加了閱讀的難度,特別是對原理不熟悉或者閱讀他人代碼的情況下進行調式的難度會增加
。
List<String> strList = new ArrayList<String>();
strList.add("一年級");
strList.add("二年級");
strList.add("三年級");
strList.add("四年級");
strList.add("二年級");
List<ClassRoom> roomLits = new ArrayList<ClassRoom>();
ClassRoom classRoom = new ClassRoom();
classRoom.setId("1001");
classRoom.setName("大教室");
classRoom.setSite("A棟");
roomLits.add(classRoom);
ClassRoom classRoom = new ClassRoom();
classRoom.setId("1002");
classRoom.setName("小教室");
classRoom.setSite("A棟");
roomLits.add(classRoom);
ClassRoom classRoom = new ClassRoom();
classRoom.setId("1003");
classRoom.setName("大教室");
classRoom.setSite("B棟");
roomLits.add(classRoom);
ClassRoom classRoom = new ClassRoom();
classRoom.setId("1004");
classRoom.setName("小教室");
classRoom.setSite("A棟");
roomLits.add(classRoom);
一、List去重處理
List<String> newStrList =
strList.stream().distinct().collect(Collectors.toList());
二、List轉Map<String,Object>
//將List 裝成Map key-Id value-ClassRoom
Map<String,ClassRoom> roomMap =
roomList.stream().collect(Collectors.toMap(ClassRoom :: getId, m ->
m));
三、List轉List
//1、提取出list對象中的一個屬性
List<String> newRoomList = roomList.stream().map(ClassRoom ::
getId).distinct().collect(Collectors.toList());
//2、提取出list對象中的一個屬性並去重
List<String> newRoomList = roomList.stream().map(ClassRoom ::
getId).distinct().collect(Collectors.toList());
四、List去重
// 根據name,site兩個屬性去重
List<ClassRoom> newRoomList = roomList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(o ->
o.getName() + ";" + o.getSite()))),
ArrayList::new));