如何使用Intstream和map方法

时间:2018-07-30 16:53:12

标签: java java-stream

我已经解决了Java书籍中的问题,并且还有一些问题。

在下面的代码中,我想通过使用map中间操作将每个元素加倍来创建一个新的流。我想打印一个新的流以获取所生成的流中除少于50个元素之外的所有元素的总和。

我该如何解决??

    package test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
import java.util.Optional;
import java.util.stream.IntStream;

public class tt {


public static void main(String[] args) {
    try {
        Stream <String> lines = Files.lines(Paths.get("C:\\Users\\wonheelee\\eclipse-workspace\\test\\stream-data.txt"));


        IntStream IS = lines.mapToInt(Integer::valueOf);

        IS.forEach(System.out::println);
        lines.close();

    } catch (IOException e) {
       // No action 
    }
}
}

1 个答案:

答案 0 :(得分:2)

你在这里..

int result = lines
            .mapToInt(Integer::parseInt)
            .map(element -> element * 2) //Double
            .filter(element -> element >= 50) //Filter out values less than 50
            .sum(); //sum

您可以将mapToIntmap合并成一个mapToInt本身

.mapToInt(element -> Integer.parseInt(element) * 2)

此外,请使用注释中的Aomine @作为注释,并使用Integer.parseInt以避免多余的装箱/拆箱。


我不太确定创建新视频流的意思。您可以通过再次调用Files.lines来获得新的流。

一旦流已被使用,就无法重用。

参考:

Is there any way to reuse a Stream?