我对JAVA不是很有经验。工作中的一名助理帮助我完成了我的任务(学校)并使用了lambda表达式。我知道这是一条捷径...但我想了解原始表达是什么。
Collections.sort(salespeopleList, (obj1, obj2) -> obj1.getUserID().compareTo(obj2.getUserID()));
答案 0 :(得分:0)
Lambda表达式不是快捷方式,它们是函数式编程的一部分。 它类似于c#中的lambda表达式。 (obj1,obj2) - > obj1.getUserID()。的compareTo(obj2.getUserID())
这里obj1和obj2是输入,箭头右侧的部分是实际的函数(如果你想要的话是匿名函数),它完全符合方法的含义。
答案 1 :(得分:0)
我不知道您要比较的对象类的确切名称,但假设该类是" SalesPerson",它看起来就像这样。
Collections.sort(salespeopleList, new Comparator<SalesPerson>() {
@Override
public int compare(SalesPerson obj1, SalesPerson obj2) {
return obj1.getUserID().compareTo(obj2.getUserID());
}
});
参考你刚写这篇文章时留下的评论
&#34;我在问,因为当我尝试Collections.reverseOrder时,我收到很多错误&#34;
如果您没有在对象类中设置equals,hash和compare,那么这两个比较都不起作用。在对象类
中需要这样的东西答案 2 :(得分:0)
原始实现需要使用比较器,并使用实际实现lambda函数的方法。
例如,通过使用现有的Comparator接口使其更明确(更具说教性):
public interface Comparator {
int compare(T o1, T o2);
}
public class ObjsComparator implements Comparator {
public int compare(SomeClass obj1, SomeClass obj2) {
// This is your lambda implementation
return obj1.getUserID().compareTo(obj2.getUserID());
}
}
ObjsComparator mycomparator = new ObjsComparator();
Collections.sort(salespeopleList, mycomparator );
一种不那么冗长的方法是:
Collections.sort(salespeopleList, new Comparator<SomeClass>() {
@Override
public int compare(SomeClass obj1, SomeClass obj2) {
// This is your lambda implementation
return obj1.getUserID().compareTo(obj2.getUserID());
}
});
答案 3 :(得分:0)
package testproject;
public class TestProject {
public static void main(String[] args) {
Compare compares = (a,b)->a.equals(b);
Object test = new Object();
System.out.println(new TestProject().compareTo(test, test, compares));
System.out.println(new TestProject().compareTo(test, new Object(), compares));
}
interface Compare{
boolean operation(Object a, Object b);
}
boolean compareTo(Object a, Object b, Compare localoperation)
{
return localoperation.operation(a, b);
}
}
我希望这能回答你的问题,但是如果你想更好地理解lambda表达式以及它们如何工作,那么这篇文章可能会有更好的帮助。
https://www.tutorialspoint.com/java8/java8_lambda_expressions.htm