Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以使用lambda的通用类型接口?_Java_Lambda - Fatal编程技术网

Java 可以使用lambda的通用类型接口?

Java 可以使用lambda的通用类型接口?,java,lambda,Java,Lambda,我还不熟悉lambda表达式,我一直在尝试使用它们来更好地理解它们是如何工作的。我在网上看到一个pdf,里面有一些练习:。我在最后一个问题上,我很难准确地理解完成它需要什么 以下是我目前拥有的代码: interface TwoElementPredicate <E> { boolean betterCheck(E e1, E e2); } public class LambdaPractice4 <E> { public static void

我还不熟悉lambda表达式,我一直在尝试使用它们来更好地理解它们是如何工作的。我在网上看到一个pdf,里面有一些练习:。我在最后一个问题上,我很难准确地理解完成它需要什么

以下是我目前拥有的代码:

    interface TwoElementPredicate <E>
{
    boolean betterCheck(E e1, E e2);
}

public class LambdaPractice4 <E>
{

    public static void main(String[] args) 
    {
        Car car1 = new Car(50);
        Car car2 = new Car(100);
        Employee worker1 = new Employee(500, "John");
        Employee worker2 = new Employee(1000, "Tom");
        String str1 = "String";
        String str2 = "SecondString";

        //These three lines do not work, due to duplicate variables. I thought lambdas were functions though?
        TwoElementPredicate<String> betterElement = (s1, s2) -> { return s1.length() > s2.length(); };
        TwoElementPredicate<Car> betterElement = (c1, c2) -> { return c1.getPrice() > c2.getPrice(); };
        TwoElementPredicate<Employee> betterElement = (w1, w2) -> w1.getSalary() > w2.getSalary(); //Trying different syntaxes

        /* These work, but instead of different ending arguments (betterCar, betterString, etc.) I want just one betterElement
        System.out.println(betterEntry(car1, car2, betterCar).getPrice());
        System.out.println(betterEntry(str1, str2, betterString));
        System.out.println(betterEntry(worker1, worker2, betterWorker).getName());
        */

        //This is what I would like to have to replace the three statements above
        System.out.println(betterEntry(car1, car2, betterElement));
        System.out.println(betterEntry(str1, str2, betterElement));
        System.out.println(betterEntry(worker1, worker2, betterElement));
    }

    public E betterEntry(E e1, E e2, TwoElementPredicate genericFace)
    {
        return genericFace.betterCheck(e1, e2) ? e1 : e2;
    }

    /*
    public static Car betterEntry(Car c1, Car c2, TwoElementPredicate genericFace)
    {
        return genericFace.betterCheck(c1, c2) ? c1 : c2;
    }

    public static Employee betterEntry(Employee e1, Employee e2, TwoElementPredicate genericFace)
    {
        return genericFace.betterCheck(e1, e2) ? e1 : e2;
    }

    public static String betterEntry(String s1, String s2, TwoElementPredicate genericFace)
    {
        return genericFace.betterCheck(s1, s2) ? s1 : s2;
    }
    */
}
接口TwoElementPredicate
{
布尔betterCheck(e1,e2);
}
公共类lambdapracce4
{
公共静态void main(字符串[]args)
{
Car car1=新车(50);
汽车2=新车(100);
员工工人1=新员工(500,“约翰”);
员工工人2=新员工(1000,“Tom”);
String str1=“String”;
String str2=“SecondString”;
//由于重复的变量,这三行不起作用。我还以为lambda是函数呢?
TwoElementPredicate betterElement=(s1,s2)->{return s1.length()>s2.length();};
TwoElementPredicate betterElement=(c1,c2)->{return c1.getPrice()>c2.getPrice();};
TwoElementPredicate betterElement=(w1,w2)->w1.getSalary()>w2.getSalary();//尝试不同的语法
/*这些工作,但不是不同的结束论点(betterCar,betterString等),我只想要一个betterElement
System.out.println(betterEntry(car1、car2、betterCar.getPrice());
System.out.println(betterEntry(str1,str2,betterString));
System.out.println(betterEntry(worker1,worker2,betterWorker.getName());
*/
//这就是我要取代上述三项声明的内容
系统输出打印LN(优化(car1,car2,优化));
System.out.println(betternetry(str1,str2,betterElement));
System.out.println(betterEntry(worker1,worker2,betterElement));
}
公共E优化(E e1、E e2、双元素谓词泛型面)
{
返回genericFace.betterCheck(e1,e2)?e1:e2;
}
/*
公共静态车辆优化(车辆c1、车辆c2、双元素谓词通用面)
{
返回genericFace.betterCheck(c1,c2)?c1:c2;
}
公共静态Employee betterEntry(Employee e1、Employee e2、TwoElementPredicate genericFace)
{
返回genericFace.betterCheck(e1,e2)?e1:e2;
}
公共静态字符串优化(字符串s1、字符串s2、TwoElementPredicate genericFace)
{
返回genericFace.betterCheck(s1,s2)?s1:s2;
}
*/
}

员工和车辆类别在此代码下定义;它们与我遇到的问题并不相关,但它们确实存在于那些想知道的人身上。

这不起作用怎么办?你得到了什么错误信息?首先,我在评论中提到的三行“这些行不工作”给出了一个由于重复变量而产生的错误。第二,我对“这是我想要的…”这三行进行了注释,给出了一个错误,即“lambdapracce4类型中的方法betterEntry(E,E,TwoElementPredicate)不适用于参数(Car,Car,TwoElementPredicate)”。我认为E应该是任何给定类型的占位符?什么重复变量?没有其他
s1
s2
或任何内容。或者你是说…多个
betterElement
lambdas?为什么不把它们分配给不同的变量名呢?lambda仍然是变量。
betterlementstring
betterlementcar
等等有什么问题吗?我可以做到。事实上,我曾经这样做过,而且成功了。然而,如果你看一下我正在处理的问题的最后三行(我发布了链接),它似乎希望相同的函数名能够处理任何类型。假设这样,无论使用何种类型,都可以调用相同的函数名。我一直无法弄清楚这是否可能,如果可能的话,如何去做。在这个练习中,lambda没有存储在变量中。您只需要
公共E优化(e1、e2、twolementpredicate genericFace)
。就这样。这怎么办?不起作用了?你得到了什么错误信息?首先,我在评论中提到的三行“这些行不工作”给出了一个由于重复变量而产生的错误。第二,我对“这是我想要的…”这三行进行了注释,给出了一个错误,即“lambdapracce4类型中的方法betterEntry(E,E,TwoElementPredicate)不适用于参数(Car,Car,TwoElementPredicate)”。我认为E应该是任何给定类型的占位符?什么重复变量?没有其他
s1
s2
或任何内容。或者你是说…多个
betterElement
lambdas?为什么不把它们分配给不同的变量名呢?lambda仍然是变量。
betterlementstring
betterlementcar
等等有什么问题吗?我可以做到。事实上,我曾经这样做过,而且成功了。然而,如果你看一下我正在处理的问题的最后三行(我发布了链接),它似乎希望相同的函数名能够处理任何类型。假设这样,无论使用何种类型,都可以调用相同的函数名。我一直无法弄清楚这是否可能,如果可能的话,如何去做。在这个练习中,lambda没有存储在变量中。您只需要
公共E优化(e1、e2、twolementpredicate genericFace)
。就这样。