Tôi có luồng Java lambda phân tích tệp và lưu trữ kết quả vào bộ sưu tập, dựa trên một số bộ lọc cơ bản.Luồng Java Lambda vào các bộ sưu tập khác nhau
Tôi chỉ học lambdas nên chịu với tôi ở đây nếu điều này là ridiculously xấu. Nhưng xin vui lòng chỉ ra những sai lầm của tôi.
Đối với một tập tin đưa ra:
#ignored
this
is
#ignored
working
fine
Mã:
List<String> matches;
Stream<String> g = Files.lines(Paths.get(givenFile));
matches = g.filter(line -> !line.startsWith("#"))
.collect(Collectors.toList());
["this", "is", "working", "fine"]
Bây giờ, làm thế nào tôi sẽ đi về thu thập các dòng bỏ qua vào một danh sách thứ hai trong cùng một dòng này? Một cái gì đó như:
List<String> matches;
List<String> ignored; // to store lines that start with #
Stream<String> g = Files.lines(Paths.get(exclusionFile.toURI()));
matches = g.filter(line -> !line.startsWith("#"))
// how can I add a condition to throw these
// non-matching lines into the ignored collection?
.collect(Collectors.toList());
Tôi nhận thấy nó khá tầm thường để mở luồng mới, thay đổi logic một chút và .collect() các dòng bị bỏ qua đủ dễ dàng. Nhưng tôi không muốn phải lặp qua tệp này hai lần nếu tôi có thể làm tất cả trong một luồng.
nó phải giống như 'g.filter (..). Bản đồ (t-> t :: toString)) thu thập (.. toList())' –
Xem ví dụ cuối cùng trong tài liệu Oracle: https: //docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html – Gene