map( ) 處理管道中數據java
@Test public void testJava8Stream() throws Exception { List<User> userList = new ArrayList<>(); userList.add(new User(1, "aaa")); userList.add(new User(2, "bbb")); userList.add(new User(3, "ccc")); User user = new User(); // lambda 表達式寫法 List<String> list1 = userList.stream() .map(e -> e.getUsername()).collect(Collectors.toList()); // 對象方法引用寫法 List<String> list2 = userList.stream() .map(User::getUsername).collect(Collectors.toList()); // 對象集合的 過濾、排序 List<User> list3 = userList.stream() .filter(e -> e.getUsername().equals("aaa")) .sorted((a, b) -> a.getId().compareTo(b.getId())) .collect(Collectors.toList()); // A對象集合 轉換成B對象集合 List<UserInfoDto> list4 = userList.stream() .map(u -> BeanCopy.of(u, new UserInfoDto()) .copy(BeanUtils::copyProperties) .get()) .collect(Collectors.toList()); }
規約 collect(Collectors) 對象集合轉換 Map對象ide
//寫法一: key-序號Id, value-用戶名 Map<Long, String> map1 = userList.stream() .collect(Collectors.toMap(User::getId, User::getUsername)); // 寫法二:key-序號Id,value-User對象 Map<Long, User> map2 = userList.stream() .collect(Collectors.toMap(User::getId, u -> user)); // 寫法三: 未u -> user,lambda 表達式的省略寫法,一樣爲:老是把傳入的參數做爲返回值返回 Map<Long, User> map3 = userList.stream() .collect(Collectors.toMap(User::getId, Function.identity()));
中間操做sorted() 排序 比較器 Comparator用法code
public void test1() { List<String> list = Arrays.asList("a", "b", "c", "d", "e"); List<User> userList = new ArrayList<>(); userList.add(new User(1, "aaa")); userList.add(new User(2, "bbb")); userList.add(new User(3, "ccc")); // 流操做 升序排列 1 list.stream().sorted(Comparator.comparing(e -> e)) .collect(Collectors.toList()).forEach(System.out::println); // 流操做 自定義對象 升序排列 2 userList.stream().sorted(Comparator.comparing(User::getGender)) .collect(Collectors.toList()).forEach(System.out::println); // 自定義排列 userList.stream().sorted((a, b) -> a.getGender().compareTo(b.getGender())) .collect(Collectors.toList()).forEach(System.out::println); }
中間操做 - distinct 濾重對象