当前位置: 首页 > 知识库问答 >
问题:

流接口的方法如何在java中工作?

糜运良
2023-03-14

最近我正在学习Java8个特性,所以我从lambda表达式开始,然后我遇到了Java流API,现在我正在尝试围绕流API中的方法,它们是如何工作的?

我对lambda表达式的理解是,如果我们想将lambda表达式传递给该方法,那么我们需要使用单个未实现的方法(Java 8接口可以有默认实现)创建一个与lambda表达式的签名匹配的接口。然后,传递lambda表达式的方法可以通过调用接口方法来执行lambda表达式。所以我可以说lambda表达式可以作为接口方法的实现。

但当我看到流API时,它有一些改变流的方法,例如下面的代码只是通过过滤小于5的整数来打印整数。

import java.util.Arrays;
import java.util.List;


public class StreamDemo {
   static List<Integer> list= Arrays.asList(new Integer(1), new Integer(2), new Integer(3), new Integer(4), new Integer(5), new Integer(6));
    public static void main(String[] ar) {
        list.parallelStream()
                .filter( x-> x<5)
                .forEach(System.out::print);
    }
}

但我不了解过滤器是如何工作的,因为它没有实现,我试图从Intellij中看到实现,它将我带到流接口,其中过滤器是采用参数谓词引用的未实现方法,但没有谓词方法<代码>布尔测试(T T T)的方法调用 那么Java是如何评估结果的,类似地,还有一种方法distinct,它没有实现,但仍然能给出准确的结果。

提前谢谢。

共有1个答案

穆俊哲
2023-03-14

Stream只是一个接口,就像List一样。在运行时Java选择一个完成这项工作的实现。如果您想知道过滤器方法是如何实现的,您可以在java.util.stream.参考管道#过滤器中找到一个示例。

我希望这能回答你的问题。

 类似资料:
  • 我最近开始在一个项目中使用MapStruct映射工具。过去,为了映射DTO->实体,反之亦然,我使用自定义映射器,例如: 在尝试获取一个可选对象时,我可以通过以下方式将实体映射到dto: 目前,正如我之前提到的,我使用的是mapStruct,问题是我的映射器是这样的,而不是类,它是这样的接口: 我想知道是否可以在stream gentle中使用这个接口方法来映射我的值,而不需要包装值,比如: 谢谢

  • 如果我从集合界面有两个对象列表 列表1={约翰,蒂姆,汤姆} 列表2={约翰,蒂姆} 这两个列表都是ArrayList的实例 Java怎么知道list2是否包含在list1中,list1.containsall(list2)? 我知道Java使用包含方法内部实现的容器()方法,和包含方法使用相等()方法。我理解差异,但我不确定Java如何遍历列表1的元素。 如果我使用列表1。containsAll

  • 我在读有效的Java课本。第一项是关于使用静态工厂方法而不是公共构造函数。我的疑问是,如果我正在指定我如何在中指定静态工厂方法?因为Java不支持内部的静态方法。教材指定了如何创建包含公共静态工厂方法的不可实例化类。但是这些方法如何访问实现类的私有构造函数呢? 教材中说,如果要定义,请创建一个不可实例化的类,并在该类中包含静态工厂方法。但是类中定义的方法如何访问具体实现的私有构造函数 编辑:-以下

  • 这段代码过滤调用流,然后打印所有大于10的元素。谓词中的测试方法为我们做到了这一点。 但是filter()方法的实际实现在哪里呢?该方法返回的“流”大于10?我不明白。 这个问题在某种程度上也适用于forEach()方法。它如何在流中迭代?因为filter()和forEach()方法在接口流中是抽象的,没有实现。

  • 问题内容: 据我了解,如果您使用Java实现接口,则实现该接口的子类必须使用该接口中指定的方法。 我注意到在某些接口(例如Collection接口)中,有一些方法被注释为可选方法,但这究竟意味着什么?我觉得接口中指定的所有方法都需要吗? 问题答案: 这里的答案似乎有很多混乱。 Java语言要求接口中的每种方法都必须由该接口的每种实现来实现。期。 这条规定没有例外。 说“收藏是一个例外”,这表明对这

  • 我试图使用以下代码理解Java接口中的默认方法,但我无法编译它: 编译器生成了以下输出: 我无法理解这些错误。我如何更正代码中的问题?