2015-03-19 25 views
10

Cho một tập tin, chúng ta có thể biến nó thành một dòng dây sử dụng, ví dụ,Làm thế nào để xây dựng một luồng Java 8 từ System.in/System.console()?

Stream<String> lines = Files.lines(Paths.get("input.txt")) 

Chúng ta có thể xây dựng một dòng dòng từ đầu vào tiêu chuẩn trong một cách tương tự?

+0

Xem thêm http://stackoverflow.com/questions/29611661/how-to-make-scanner -strings-into-a-stream-in-java – Vadzim

Trả lời

20

Một biên soạn các câu trả lời kocko và bình luận Holger của:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
Stream<String> stream = in.lines().limit(numberOfLinesToBeRead); 
1

Thông thường đầu vào tiêu chuẩn được đọc từng dòng, vì vậy những gì bạn có thể làm là lưu trữ tất cả dòng đọc vào bộ sưu tập rồi tạo Stream hoạt động trên đó.

Ví dụ:

List<String> allReadLines = new ArrayList<String>(); 

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
String s; 
while ((s = in.readLine()) != null && s.length() != 0) { 
    allReadLines.add(s); 
} 

Stream<String> stream = allReadLines.stream(); 
+3

Nếu bạn có một 'BufferedReader' không cần lưu trữ các dòng vào một' Bộ sưu tập' để [lấy một 'Dòng'] (http://docs.oracle. com/javase/8/docs/api/java/io/BufferedReader.html # lines--). Vấn đề lớn hơn là các bảng điều khiển tương tác thường không có tệp kết thúc… – Holger

+0

Rất đẹp. Không biết phương pháp mới được giới thiệu này. Cảm ơn, @Holger. :) –

+0

Tuyệt vời, BufferedReader.lines sẽ loại bỏ phần lớn tính từ trong câu trả lời này. Nếu số lượng các dòng được đọc được biết, sau đó in.limit (numberOfLines) nên làm việc ở đây –

Các vấn đề liên quan