lambda表達式排序簡潔
1.給一個字符串數組:
String[] atp = {"2016-06-28 08:00:00", "2017-12-05 19:17:32","2017-03-06 22:14:51","2016-12-28 08:00:00", "2017-03-05 19:17:32","2017-03-06 22:14:51"};
打印結果如圖所示:
2016-06-28 08:00:00 2017-12-05 19:17:32 2017-03-06 22:14:51 2016-12-28 08:00:00 2017-03-05 19:17:32 2017-03-06 22:14:51
2.通過lambda對數組排序:
Arrays.sort(atp, (String s1, String s2) -> (s1.compareTo(s2)));//Lambdas排序集合
打印結果:
2016-06-28 08:00:00 2016-12-28 08:00:00 2017-03-05 19:17:32 2017-03-06 22:14:51 2017-03-06 22:14:51 2017-12-05 19:17:32
3.lambda對list集合排序
定義一個對象:
public static class People { private String date; public People(String date) { this.date = date; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } @Override public String toString() { return "People{" + "date='" + date + '\'' + '}'; } }
將字符串數組加到對象中,並排序:
for(String str: atp){ list.add(new People(str)); } //------------------集合排序-------------------- //1.在java8之前,給list排序需要使用實現java.util.Comparator接口的匿名類: Collections.sort( list, new Comparator<People>() { public int compare(People p1, People p2){ return p1.getDate().compareTo(p2.getDate()); } } ); //2.java8開始可以使用lambda表達式替換匿名類。注意左邊的參數p1、p2在編譯時自動推導: Collections.sort(list, (p1, p2) -> p1.getDate().compareTo(p2.getDate())); //3.這個例子使用Comparator.comparing 和 ::雙冒號可以簡單表示: Collections.sort(list, Comparator.comparing(People::getDate)); list.forEach(people->{ System.out.println(people.getDate()); });
lambda對於map按ASCII排序:
//map排序 Map<String, Integer> map = new HashMap(); map.put("349",12); map.put("329",13); map.put("6",14); map.put("399",15); map.put("99",16); map = map.entrySet() .stream() .sorted(Map.Entry.<String, Integer>comparingByKey()) //comparingByValue ,comparingByKey排出來的329 、6 ...... .collect(Collectors.toMap(k -> k.getKey(), v -> v.getValue(), (k, v) -> k, LinkedHashMap::new));
######lambda對對象屬性排序:
升序:
List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
降序:
List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge).reversed())
.collect(Collectors.toList());