Tôi có một chuỗi duy nhất của định dạng:Java 8 suối trên mảng chuỗi
row1col1 row1col2
row2col1 row2col2
row3col1 row3col2
và vân vân ...
tôi muốn trích xuất từng hạng mục và xây dựng một mảng của các đối tượng với các thuộc tính như thế này :
new MyObject(row1col1, row1col2);
Tôi mới dùng Java 8 và Luồng và tôi muốn tìm hiểu cách tôi có thể đạt được điều này mà không có vòng lặp.
Thông thường tôi sẽ sử dụng một String.split('\n')
cho tích lũy hàng vào một mảng String
Và sau đó một vòng nơi cho mỗi dòng tôi sẽ chia một lần nữa trên tách không gian và với các mảng kết quả của hai yếu tố (row1col1 row1col2
) xây dựng đối tượng của tôi, cho đến khi không còn hàng nào để xử lý.
Như thế này:
String sausage = "row1col1 row1col2\nrow2col1 row2col2\nrow3col1 row3col2";
String[] rows = sausage.split("\n");
for (String row : rows) {
String[] objectData = u.split("\\s+");
MyObject myObject = new MyObject(objectData[0], objectData[1]);
myObjectList.add(myObject);
}
bất cứ ai có thể giải thích cho tôi làm thế nào để đạt được cùng với con suối và những gì là cơ chế đằng sau đó cho phép tôi làm như vậy?
Đây có phải là cách suy nghĩ hợp lý khi tăng số lượng các phần tử hay không vì tất cả các ví dụ tôi đã thấy luồng tập trung vào lọc, thu thập hoặc nói chung cho một tập hợp các phần tử lấy một tập nhỏ áp dụng một số tiêu chí.
Bạn có muốn toàn bộ dòng được bộ nhớ như một mảng, hoặc bạn muốn xử lý một rowset tại một thời điểm, và lặp lại vòng lặp xử lý một hàng tại một thời điểm? – Tschallacka
Tôi thực sự tải luồng từ một tệp, vì vậy tôi nghĩ rằng nó được đọc tất cả trong bộ nhớ trước khi được xử lý đúng không? –
@LucianEnache, không nhất thiết. Phụ thuộc vào cách bạn đang đọc. – shmosel