假设以下表示流过滤示例的最小示例
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
,并且过滤谓词看起来比较丑陋到第一个。这个用例有没有更短或更简洁的可能性?使用方法调用的重构没有帮助,因为该方法将获得两个参数(targetString
和string
),遗憾的是它们不会转换为成员引用。