Java 8 Stream如何实现每输出5个单词后第6个单词换行打印
实现方案
你可以用AtomicInteger作为计数器实现换行逻辑,修改后的完整代码如下:
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; public class Histogram { public static void main(String[] args) throws IOException { Stream<String> stream = Files.lines(Paths.get("words.txt")); ArrayList<String> list = (ArrayList<String>) stream .map(w -> w.split("\\.|\\s+|,")).flatMap(Arrays::stream) .filter(x-> x.length() != 0) .collect(Collectors.toList()); AtomicInteger count = new AtomicInteger(0); list.forEach(s -> { System.out.print(s + "(" + s.length() + ") "); // 每输出5个单词换行 if (count.incrementAndGet() % 5 == 0) { System.out.println(); } }); } }
其他可选实现
如果不想引入原子类,也可以改用普通for循环遍历,性能开销更低,逻辑更直观:
for (int i = 0; i < list.size(); i++) { String word = list.get(i); System.out.print(word + "(" + word.length() + ") "); if ((i + 1) % 5 == 0) { System.out.println(); } }
内容的提问来源于stack exchange,提问作者Andris Zariņs
相关产品推荐
相关产品推荐

