相关疑难解决方法(0)

lambda中的Java 8 lambda不能修改外部lambda中的变量

假设我有一个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,所以也许我只是没有正确的语法.

java lambda java-8

5
推荐指数
1
解决办法
9163
查看次数

Java 8中的legacy for循环,流和parallelStream之间的比较

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)

java performance for-loop java-8 java-stream

-2
推荐指数
1
解决办法
728
查看次数

标签 统计

java ×2

java-8 ×2

for-loop ×1

java-stream ×1

lambda ×1

performance ×1