lambda表達式排序


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());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM