stream流sorted自定义排序
时间: 2023-06-04 16:02:15 浏览: 1243
可以使用Java 8中的Stream.sorted()方法进行自定义排序。例如,我们可以这样实现一个按照字符串长度从小到大排序的函数:
List<String> list = Arrays.asList("apple", "banana", "pear", "orange");
List<String> sortedList = list.stream()
.sorted(Comparator.comparing(String::length))
.collect(Collectors.toList());
System.out.println(sortedList); // 输出:[pear, apple, banana, orange]
相关问题
java stream流集合 自定义排序
要在Java Stream流集合中进行自定义排序,可以使用`sorted`方法结合`Comparator`来实现。以下是一个示例代码:
```java
List<Integer> numbers = Arrays.asList(5, 3, 8, 2, 1, 9);
List<Integer> sortedNumbers = numbers.stream()
.sorted(Comparator.reverseOrder()) // 使用逆序排序
.collect(Collectors.toList());
System.out.println(sortedNumbers); // 输出: [9, 8, 5, 3, 2, 1]
```
在上面的示例中,我们先创建了一个包含整数的列表`numbers`。然后,我们使用`stream`方法将列表转换为流,并使用`sorted`方法进行排序。在这个例子中,我们使用了`Comparator.reverseOrder()`来实现逆序排序。最后,我们使用`collect`方法将流转换回列表并将结果打印出来。
stream流sorted的排序规则
stream流的sorted方法可以接受一个Comparator参数,用于指定排序规则。Comparator是一个函数式接口,它定义了用于比较两个对象的方法。排序规则可以根据对象的某个属性进行升序或降序排列。
如果要按照对象的某个属性进行升序排列,可以使用Comparator.comparing方法,并传入一个函数,该函数用于提取对象的属性值。例如,假设有一个Person类,有name和age两个属性,要按照age属性进行升序排列,可以使用以下代码:
```
List<Person> persons = // 获取Person对象列表
persons.stream()
.sorted(Comparator.comparing(Person::getAge))
.forEach(System.out::println);
```
如果要按照对象的某个属性进行降序排列,可以在Comparator.comparing方法之后调用reversed方法。例如,要按照age属性进行降序排列,可以使用以下代码:
```
List<Person> persons = // 获取Person对象列表
persons.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.forEach(System.out::println);
```
除了使用Comparator.comparing方法外,还可以使用Comparator接口的其他静态方法自定义排序规则。例如,可以使用Comparator.reverseOrder方法进行逆序排序,或者使用Comparator.naturalOrder方法进行自然顺序排序。
请注意,sorted方法是一个中间操作,需要配合终端操作(如forEach、collect等)才能触发执行。
阅读全文