在Java的Stream API中,lambda
表达式通常与Stream
的sorted()
方法一起使用来对流中的元素进行排序,而不是orderBy()
方法(因为orderBy()
并不是Java Stream API的一部分)。sorted()
方法可以接受一个Comparator
或者通过lambda
表达式来定义排序逻辑。
以下是一些使用lambda
表达式和sorted()
方法的示例:
示例1:对整数列表进行排序
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 8, 1, 2);
// 使用lambda表达式进行升序排序
List<Integer> sortedNumbers = numbers.stream()
.sorted((a, b) -> a - b)
.collect(Collectors.toList());
System.out.println(sortedNumbers); // 输出: [1, 2, 3, 5, 8]
}
}
在这个例子中,sorted((a, b) -> a - b)
使用了lambda
表达式来定义比较逻辑,从而实现升序排序。
示例2:对字符串列表进行排序
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用lambda表达式进行字典序排序
List<String> sortedNames = names.stream()
.sorted((a, b) -> a.compareTo(b))
.collect(Collectors.toList());
System.out.println(sortedNames); // 输出: [Alice, Bob, Charlie]
}
}
在这个例子中,sorted((a, b) -> a.compareTo(b))
使用了lambda
表达式来调用String
类的compareTo
方法,从而实现字典序排序。
示例3:对自定义对象列表进行排序
假设我们有一个Person
类,并且我们想要根据年龄对Person
对象列表进行排序:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// 使用lambda表达式根据年龄进行升序排序
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparingInt(p -> p.age))
.collect(Collectors.toList());
System.out.println(sortedPeople); // 输出: [Bob (25), Alice (30), Charlie (35)]
}
}
在这个例子中,sorted(Comparator.comparingInt(p -> p.age))
使用了Comparator.comparingInt
方法和lambda
表达式来根据Person
对象的年龄进行排序。
总结
虽然Java Stream API中没有orderBy()
方法,但你可以使用sorted()
方法和lambda
表达式来实现排序功能。sorted()
方法可以接受一个Comparator
,而lambda
表达式可以方便地定义这个Comparator
。