Java 8流否定了过滤器

时间:2016-11-03 13:04:42

标签: java-8 java-stream

假设以下表示流过滤示例的最小示例

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

public class Main {

    public static void main(String[] args) {
        final List<String> strings = Arrays.asList("Hello", "this", "is", "a", "test");
        final String targetString = "a";

        // 1
        strings.stream()
                .filter(targetString::equals)
                .findFirst()
                .ifPresent(System.out::println);

        // 2
        strings.stream()
                .filter((String string) -> !targetString.equals(string))
                .forEach(System.out::println);
    }
}

现在,第一个(// 1)操作按特定strings过滤targetString,然后执行操作。特别要考虑targetString::equals - 成员参考,它看起来非常简短。

相反,第二个(// 2)操作过滤strings,其中每个字符串等于特定targetString,并且过滤谓词看起来比较丑陋到第一个。这个用例有没有更短或更简洁的可能性?使用方法调用的重构没有帮助,因为该方法将获得两个参数(targetStringstring),遗憾的是它们不会转换为成员引用。

0 个答案:

没有答案