she*_*key 4 java-8 java-stream
有没有办法实现类似下面我的代码类似的东西,而不必避免重复自己,同时保持低处理?
List<String> alist = new ArrayList<>();
alist.add("hello");
alist.add("hello2");
if(verbose) {
alist.stream()
.peek(System.out::println)
.forEach(/*dostuff*/);
}
else {
alist.stream().forEach(/*dostuff*/);
}
Run Code Online (Sandbox Code Playgroud)
如上所示,我被迫通过在if或者其他情况下处理流来重复自己,如果流变得有点长,看起来有点难看.
还有另一种选择,在我看来看起来更干净,但应该是性能更差,因为它比较了列表中每个项目的详细布尔值.
List<String> alist = new ArrayList<>();
alist.add("helllo");
alist.add("hello2");
alist.stream()
.peek(this::printVerbose)
.forEach(/*dostuff*/);
}
private void printVerbose(String v) {
if(verbose) {
System.out.println(v);
}
Run Code Online (Sandbox Code Playgroud)
}
你可以这样做:
Stream<Integer> stream = alist.stream();
if(verbose) {
stream = stream
.peek(System.out::println);
}
stream.forEach(/*dostuff*/);
Run Code Online (Sandbox Code Playgroud)