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

Java8流如果不执行收集函数,则过滤和映射函数不工作

丁灿
2023-03-14
    public static void main(String[] args) throws Exception {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        //not work
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                System.out.println("1:test:" + s);
                return true;
            }
        }).map(s -> {
            System.out.println("1:map:" + s);
            return s;
        });
        
        // it work
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                System.out.println("2:test" + s);
                return true;
            }
        }).map(s -> {
            System.out.println("2:map" + s);
            return s;
        }).collect(Collectors.toList());
    }

上述代码的输出为:

2:test1
2:map1
2:test2
2:map2
2:test3
2:map3
2:test4
2:map4

共有1个答案

怀飞掣
2023-03-14

流管道由一个源(可能是数组、集合、生成器函数、I/O通道等)、零个或多个中间操作(将一个流转换为另一个流,如filter(谓词))和一个终端操作(产生结果或副作用,如count()或forEach(消费者))组成。溪水是懒散的;只有在终端操作启动时才执行对源数据的计算,并且只有在需要时才消耗源元素

在此阅读更多信息

 类似资料:
  • 假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?

  • 我正在用Java8为一个文件编写一个解析器。使用读取该文件,并返回一个顺序的。 每一行都映射到一个数据对象,如下所示: 现在我们可以将流中的每一行映射到相应的结果: 但是,流现在包含要删除的值: 如我在中所知,如果需要结果,我如何组合映射/筛选操作?

  • 我有一个需要过滤的对象。 我需要输入“数据”,只有“isEnabled”为真的值的ID。

  • 我需要在我的服务器上运行函数 但是由于安全原因被禁用,但是PHP执行函数正在运行和。 是否可以使用php函数执行相同的操作? 禁用功能 链接,符号链接,执行,通过,proc_close,proc_get_status,proc_open,shell_exec,系统,流行,关闭

  • 我对流图法有点困惑。有一些简单的源代码可以运行: map()签名:Stream map(函数 在我的选择中,我认为赋予文字的功能。stream()。map应该有1个参数,但是string::length没有任何输入参数,只返回int。 它看起来像word流调用字符串中的每个元素“word”。长度(),但我不知道该怎么做?为什么string::length签名不需要与函数签名(R apply(T))

  • 这是我现在的代码。 我的同事使用Java流API编写了非常好的代码。我试图将其重写为一个流语句,但我被卡住了。 我该怎么做?理想情况下,我想要一个单一的流媒体声明。。。