一、Stream排序升序
1、Stream是Java 8引入的新特性,它可以用於對集合進行過濾、映射等操作,其中對集合進行排序也是其中之一。
2、Stream提供的sorted方法可以對集合進行排序,例如:
List<String> list = Arrays.asList("a", "c", "b");
list.stream().sorted().forEach(System.out::println);
以上代碼輸出結果為:
a
b
c
3、需要注意的是,對於數字類型的集合排序的結果不一定正確,因為默認按照字典序排序,需要通過自定義Comparator進行指定。
List<Integer> list = Arrays.asList(3, 2, 1);
list.stream().sorted(Comparator.naturalOrder()).forEach(System.out::println);
以上代碼輸出結果為:
1
2
3
二、Stream排序
1、除了sorted方法,Stream還提供了一個sorted方法,該方法接受一個Comparator參數。該方法會使用Comparator進行排序,例如:
List<String> list = Arrays.asList("a", "c", "b");
list.stream().sorted((s1, s2) -> s2.compareTo(s1)).forEach(System.out::println);
以上代碼輸出結果為:
c
b
a
2、需要注意的是,該方法返回的是一個新的Stream。
三、Stream分組同時排序
1、Stream還提供了一個groupingBy方法,該方法可以對集合進行分組。除此之外,使用Comparator對子集合進行排序也是非常常見的操作,例如:
List<Person> list = Arrays.asList(new Person("Tom", 18), new Person("Jack", 20), new Person("Lucy", 18));
Map<Integer, List<Person>> map = list.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.toList()));
map.values().forEach(l -> l.sort((p1, p2) -> p1.getName().compareTo(p2.getName())));
map.forEach((k, v) -> {
System.out.println(k + "歲的人有:");
v.forEach(System.out::println);
});
以上代碼輸出結果為:
18歲的人有:
Person{name='Lucy', age=18}
Person{name='Tom', age=18}
20歲的人有:
Person{name='Jack', age=20}
2、需要注意的是,排序操作必須在子集合中進行,因為groupingBy方法返回的是一個Map集合。
四、Stream sorted排序
1、Stream的sorted方法也可以用來對集合中的元素進行排序,例如:
List<String> list = Arrays.asList("a", "c", "b");
list.stream().sorted((s1, s2) -> s2.compareTo(s1)).forEach(System.out::println);
以上代碼輸出結果為:
c
b
a
2、需要注意的是,該方法返回的是一個新的Stream。
五、Stream降序排列
1、Stream提供了一個reversed方法,該方法可以將一個已排序的集合進行降序排列,例如:
List<String> list = Arrays.asList("b", "c", "a");
list.stream().sorted().forEach(System.out::println);
list.stream().sorted().reversed().forEach(System.out::println);
以上代碼輸出結果為:
a
b
c
c
b
a
2、需要注意的是,該方法返回的是一個新的Stream。
六、Stream流sort排序
1、Stream還提供了一個流sort方法,該方法可以對數組進行排序。
int[] array = {3, 2, 1};
Arrays.stream(array).sorted().forEach(System.out::println);
以上代碼輸出結果為:
1
2
3
2、需要注意的是,該方法返回的是一個新的IntStream。
七、小結
本文從多個方面對Java Stream排序做了詳細的闡述,包括Stream排序升序、Stream排序、Stream分組同時排序、Stream sorted排序、Stream降序排列、Stream流sort排序。通過本文的介紹,相信讀者已經懂得了如何運用Stream對Java集合進行排序的技巧,進一步提高了代碼的簡潔性和可讀性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/193404.html