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

流API中“filter()”方法在java中的性能[重复]

楮杰
2023-03-14

以下是两个条件

 1. filter(cond1 && cond2 && cond3)
 2. filter(cond1).filter(cond2).filter(cond3)

List<Employee> emps1 = employees.stream()                                                     
        .filter((Employee e) -> e.name.endsWith("n") && e.salary > 10000 && e.id % 2 == 1)    
        .collect(Collectors.toList());                                                        
                                                                                              
List<Employee> emps2 = employees.stream()                                                     
        .filter(e -> e.name.endsWith("n"))                                                    
        .filter(e -> e.salary > 10000)                                                        
        .filter(e -> e.id % 2 == 1)                                                           
        .collect(Collectors.toList());                                                        

共有1个答案

宋岳
2023-03-14

筛选器(cond1&&cond2&&cond3)的情况下,只要任何条件的计算结果为false,条件的处理就会停止。例如,如果cond1计算结果为false,则不会处理其他条件(cond2cond3)。类似地,如果cond1计算结果为true,则处理将继续计算cond2,如果计算结果为false,则不会计算条件cond3

filter(cond1).filter(cond2).filter(cond3)的处理也以同样的方式进行,如下例所示:

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream.of("one", "two", "three", "four")
        .filter(s -> {
            System.out.println("Hello");
            return s.contains("t");
        })
        .filter(s -> {
            System.out.println("Hi");
            return s.contains("f");
        })
        .forEach(System.out::println);
    }
}

产出:

Hello
Hello
Hi
Hello
Hi
Hello
    null
import java.util.function.Predicate;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Predicate<String> containsT = s -> s.contains("t");
        Predicate<String> containsE = s -> s.contains("e");
        
        Stream.of("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten")
                .filter(containsT.and(containsE))
                .forEach(System.out::println);
    }
}
three
eight
ten
 类似资料:
  • 这段代码过滤调用流,然后打印所有大于10的元素。谓词中的测试方法为我们做到了这一点。 但是filter()方法的实际实现在哪里呢?该方法返回的“流”大于10?我不明白。 这个问题在某种程度上也适用于forEach()方法。它如何在流中迭代?因为filter()和forEach()方法在接口流中是抽象的,没有实现。

  • 本文向大家介绍Java中isDaemon()方法的重要性?,包括了Java中isDaemon()方法的重要性?的使用技巧和注意事项,需要的朋友参考一下 守护程序线程是java中的一个低优先级线程,它在后台运行,并且主要由JVM创建,用于执行后台任务,例如垃圾回收(GC)。 如果没有用户线程在运行,那么即使守护程序线程在运行,JVM也可以退出。守护程序线程的唯一目的是服务用户线程。的isDaemon

  • 问题内容: 在布莱恩·格茨(Brian Goetz)的这个非常有趣但只有一年历史的演示中,他在幻灯片链接中介绍了应该在Stream API中提供的一种方法,该方法应该将列表(?)的元素聚合到地图(给定默认初始值)以及操作该值的方法(也适用于重复键)-请参见演示文稿中的下一张幻灯片。 显然,Stream API中没有这种方法。还有另一种方法可以在Java 8中执行类似操作吗? 问题答案: 聚合操作可

  • 本文向大家介绍Java 9中ofInstant()方法的重要性?,包括了Java 9中ofInstant()方法的重要性?的使用技巧和注意事项,需要的朋友参考一下 在Java 9中,引入了ofInstant()方法进行转换。它是LocalDate,LocalTime和LocalDateTime类的静态方法。此方法将java.time.Instant对象转换为需要时区的LocalDate,形式为ja

  • 本文向大家介绍java 中HashCode重复的可能性,包括了java 中HashCode重复的可能性的使用技巧和注意事项,需要的朋友参考一下 java 中HashCode重复的可能性 今天有同事提议用String的hashcode得到int类型作为主键。其实hashcode重复的可能性超大,下面是java的缺省算法:   但是什么情况下会重复?下面是测试代码 在A-z范围内有特殊字符,从结果看,

  • 我是spark的新手,当我在java api中使用spark的filter时,我得到了这个错误(如果collect()所有表都正确工作,我可以看到从Cassandra获得的所有数据。)我检查了master和workers版本相同,当应用程序在spark的web ui中启动时,我可以看到它,但是: 以及spark Version2.1.1、scala Version2.11、Java8和my pom