我已经解决了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
}
}
}
答案 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
您可以将mapToInt
和map
合并成一个mapToInt
本身
.mapToInt(element -> Integer.parseInt(element) * 2)
此外,请使用注释中的Aomine @作为注释,并使用Integer.parseInt
以避免多余的装箱/拆箱。
我不太确定创建新视频流的意思。您可以通过再次调用Files.lines
来获得新的流。
一旦流已被使用,就无法重用。
参考: