首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8提供了Stream API、Lambda以及与java 7的简明代码比较

Java 8提供了Stream API、Lambda以及与java 7的简明代码比较
EN

Stack Overflow用户
提问于 2019-05-17 19:19:08
回答 1查看 186关注 0票数 0

我正在学习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。

我在谷歌上搜索了一下,但没有找到任何令人满意的答案。

代码语言:javascript
复制
//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);
EN

回答 1

Stack Overflow用户

发布于 2019-05-17 19:35:11

但他说,如果我们使用某个类实现比较器接口,那么我可以在使用

表达式时重用它,无论何时进行排序,我都必须一次又一次地编写逻辑。

您只需将lambda捕获到一个变量中,就像第一个示例中所做的那样,并在您想要的任何地方使用它。这个论点在7个抵制开发人员中很常见,首先告诉他你不需要为单个实例化构造一个类;第二,比较器代码出现在正确的位置,这样读取集合是如何排序的就不需要搜索排序类的定义;第三,编译器在使用lambda时最擅长优化...

For Stream API我们也可以对元素进行排序,那么为什么要使用Java8的Stream API进行排序呢

排序正是流式POV中不好的功能之一。它只是为了不中断流:构造流,收集,排序,再次流,等等

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56185354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档