在Java 8中,我们有像这样的lambdas
a.sort((v1, v2) -> {});
如何在Java 7中实现此功能?
答案 0 :(得分:5)
Java 7和8之间存在2个与此问题相关的差异。
List
没有sort
方法。您必须使用Collections.sort
。->
)不是该语言的一部分。Java 7等价物是
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer v1, Integer v2) {
// Write what you need here.
}
});
答案 1 :(得分:2)
它基本上转化为:
a.sort(new Comparator<T>(){
public int compare(T v1, T v2){
return 0;
}
});
Java 8引入了“lambda”概念,它允许您消除匿名子类语法(以及其他内容)。您可以阅读更多相关信息here。
答案 2 :(得分:1)
Java 8中引入的简写lambda表达式语法大致代表Java 7中的以下内容:
a.sort(new Comparator() {
public int compare(Object v1, Object v2) {
// ...
}
}
请注意,我不知道v1
和v2
的类型,因此我将其归纳为Object
。
答案 3 :(得分:0)
在java 8中,您可以使用lambda表达式代替Comparator来对集合进行排序。传统上,您要为要进行排序的类实现Comparable接口,并覆盖compareTo方法以显示对象的排序方式,或者调用Collections.sort传递到集合中以及新的Comparator。
我是java 8你可以在它的位置使用lambda表达式。此示例具有两个对象v1和v2。在您的示例中,没有关于如何比较这些对象的实现。
编辑:
一个例子
Java 8:
java.util.Random r = new java.util.Random();
ArrayList<TestClass> a = new ArrayList<>();
for( int i = 0; i < 10; i++ ){
TestClass t = new TestClass();
t.setValue(r.nextInt());
a.add(t);
}
System.out.println("Before sort.");
a.sort((v1, v2) -> { return Integer.compare( v1.getValue(), v2.getValue()); });
a.forEach( x -> System.out.println("Value: " + x.getValue()));
等同于(在Java 7中):
java.util.Random r = new java.util.Random();
ArrayList<TestClass> a = new ArrayList<>();
for( int i = 0; i < 10; i++ ){
TestClass t = new TestClass();
t.setValue(r.nextInt());
a.add(t);
}
System.out.println("Before sort.");
Collections.sort(a, new Comparator<TestClass>(){
public int compare(TestClass x, TestClass y) {
return Integer.compare(x.getValue(), y.getValue());
}
});
for(TestClass x : a){
System.out.println("Value: " + x.getValue());
}
正如您所看到的,Lambda表达式可以大大减少所需代码行数。