假设我有一个List<String>和一个List<Transfomer>.我想将每个变换器应用于列表中的每个字符串.
使用Java 8 lambdas,我可以这样做:
strings.stream().map(s -> {
for(Transformer t : transformers) {
s = t.apply(s);
}
return s;
}).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
但我想做更像这样的事情,但是它会导致编译时错误:
strings.stream().map(s -> transformers.stream().forEach(t -> s = t.apply(s))).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
我刚刚开始玩lambdas,所以也许我只是没有正确的语法.
import java.util.ArrayList;
import java.util.List;
public class IterationBenchmark {
public static void main(String args[]){
List<String> persons = new ArrayList<String>();
persons.add("AAA");
persons.add("BBB");
persons.add("CCC");
persons.add("DDD");
long timeMillis = System.currentTimeMillis();
for(String person : persons)
System.out.println(person);
System.out.println("Time taken for legacy for loop : "+
(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
persons.stream().forEach(System.out::println);
System.out.println("Time taken for sequence stream : "+
(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
persons.parallelStream().forEach(System.out::println);
System.out.println("Time taken for parallel stream : "+
(System.currentTimeMillis() - timeMillis));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
AAA
BBB
CCC
DDD
Time taken for …Run Code Online (Sandbox Code Playgroud)