JAVA - 不简化这个lambda表达式

时间:2017-11-20 03:32:24

标签: java lambda

我对JAVA不是很有经验。工作中的一名助理帮助我完成了我的任务(学校)并使用了lambda表达式。我知道这是一条捷径...但我想了解原始表达是什么。

Collections.sort(salespeopleList, (obj1, obj2) -> obj1.getUserID().compareTo(obj2.getUserID()));

4 个答案:

答案 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