java8--排序
阿新 • • 發佈:2018-11-20
例如 private pri info fun img 分享 nco getc
排序的傳統的寫法是:
Collections.sort( SortTest.users, new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getAge() - o2.getAge(); } });
java8裏可以有如下實現
/// 第一種法法和它的實現類 SortTest.users.sort((o1, o2) -> o1.getAge() - o2.getAge()); SortTest.users.sort(new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getAge() - o2.getAge(); } }); // 第二種方式和他的實現類 SortTest.users.sort(comparingInt(User::getAge)); SortTest.users.sort( comparingInt(new ToIntFunction<User>() { @Override public int applyAsInt(User value) { return value.getAge(); } }));
看到comparingInt方法後看了下Comparator接口提供的方法,對於單條件排序的方式有很多,甚至提供了針對null的排序,略臃腫,不過很齊全。
對於多條件比較的,例如傳統代碼
// 根據姓名,年齡,積分排序洗滌 publicstatic void traditionCombinationCompare() { Collections.sort( SortTest.users, new Comparator<User>() { @Override public int compare(User o1, User o2) { if (o1.getName().equals(o2.getName())) { if (o1.getAge().equals(o2.getAge())) { return o1.getAge() - o2.getAge(); } else { return o1.getCredits() - o2.getCredits(); } } else { return o1.getName().compareTo(o2.getName()); } } }); }
在java8中很簡潔,第二個表達式是我學習的時候查看每個方法原來的參數及實現
private static void traditionCombinationCompareInJava8() { SortTest.users.sort( comparing(User::getName).thenComparing(User::getAge).thenComparing(User::getCredits)); SortTest.users.sort( comparing( new Function<User, String>() { @Override public String apply(User user) { return user.getName(); } }) .thenComparing( user -> { return user.getAge(); }) .thenComparing(User::getCredits)); SortTest.users.forEach(user -> System.out.println(JSON.toJSONString(user))); }
java8--排序