我正在学习java 8的新特性,我遇到了一种情况,我无法说服我的面试官为什么Java 8提供了比旧版本java更简洁的代码。我已经提供了一个函数接口和比较器接口的示例,该类不必实现这些接口。使用lambda表达式,我们可以像下面的代码Example1那样直接提供方法的实现。我已经向他解释了如何使用java8减少行数。
我还提供了比较器接口的示例,我们可以使用lambda表达式直接实现比较器接口。但他说,如果我们使用某个类实现比较器接口,那么我可以在使用Lambda表达式时重用它,无论何时进行排序,我都必须一次又一次地编写逻辑。所以我不知道如何解释java8如何提供简洁的代码,因为根据他的描述,他是对的。
对于Stream API,我们也可以对元素进行排序,那么当集合具有Collections.sort方法时,为什么还要使用Java8的Stream API进行排序呢?如果我使用Stream API进行排序,那么我已经收集了新列表中的所有元素,而使用Collections.sort将对现有列表进行排序,那么我们为什么要使用Stream API?请参阅示例3。
所以我不能理解Java8如何提供简洁的代码,以及stream API有何帮助,或者为什么我应该使用Stream API。
我在谷歌上搜索了一下,但没有找到任何令人满意的答案。
//Exaple 1
//Traditional Way
interface SampleInterface {
public void sampleMethod();
}
public class SampleClass implements SampleInterface {
@Override
public void sampleMethod() {
// Implementation Logic
}
}
//Using Lambda expression and Functional Interface
@FunctionalInterface
interface SampleInterface {
public void sampleMethod();
}
public class SampleClass {
public static void main(String[] args) {
SampleInterface sf = () -> {System.out.println("Implementation of interface method");};
}
}
//Example 2
Comparator<Student> c = (s1, s2) -> {return (s1.age < s2.age ? -1 : (s1.age > s2.age) ? 1 : 0 );};
//Example 3
//Using Stream API
List<Employee> newList = empList.stream().sorted((v1, v2) -> (v2.id < v1.id) ? -1 : (v2.id > v1.id) ? 1 : 0).collect(Collectors.toList());
//Using comparator
Collections.sort(list, comparator);发布于 2019-05-17 19:35:11
但他说,如果我们使用某个类实现比较器接口,那么我可以在使用
表达式时重用它,无论何时进行排序,我都必须一次又一次地编写逻辑。
您只需将lambda捕获到一个变量中,就像第一个示例中所做的那样,并在您想要的任何地方使用它。这个论点在7个抵制开发人员中很常见,首先告诉他你不需要为单个实例化构造一个类;第二,比较器代码出现在正确的位置,这样读取集合是如何排序的就不需要搜索排序类的定义;第三,编译器在使用lambda时最擅长优化...
For Stream API我们也可以对元素进行排序,那么为什么要使用Java8的Stream API进行排序呢
排序正是流式POV中不好的功能之一。它只是为了不中断流:构造流,收集,排序,再次流,等等
https://stackoverflow.com/questions/56185354
复制相似问题