Tôi đang đọc về các luồng Java và khám phá những điều mới khi tôi đi cùng. Một trong những điều mới tôi tìm thấy là hàm peek()
. Hầu hết mọi thứ tôi đã đọc trên peek đều nói rằng nó nên được sử dụng để gỡ lỗi các luồng của bạn.Trong luồng Java là peek thực sự chỉ để gỡ lỗi?
Điều gì sẽ xảy ra nếu tôi có Luồng mà mỗi Tài khoản có tên người dùng, trường mật khẩu và phương thức login() và loggedIn().
Tôi cũng có
Consumer<Account> login = account -> account.login();
và
Predicate<Account> loggedIn = account -> account.loggedIn();
Tại sao điều này sẽ rất xấu?
List<Account> accounts; //assume it's been setup
List<Account> loggedInAccount =
accounts.stream()
.peek(login)
.filter(loggedIn)
.collect(Collectors.toList());
Hiện tại, tôi có thể nói chính xác điều này dự định làm. Nó;
- Mất một danh sách tài khoản
- cố gắng đăng nhập vào từng tài khoản một
- lọc ra bất kỳ tài khoản mà chưa đăng nhập
- thu thập các đăng nhập tài khoản vào một danh sách mới
Nhược điểm của việc làm như thế này là gì? Bất kỳ lý do gì tôi không nên tiếp tục? Cuối cùng, nếu không phải là giải pháp này thì sao?
Phiên bản gốc của phương thức này đã sử dụng phương thức .filter() như sau;
Bất cứ lúc nào tôi thấy mình cần một đa dòng lambda, tôi di chuyển dây chuyền đến một phương pháp riêng và vượt qua tham chiếu phương thức thay vì lambda. – VGR
Vâng, tôi hiểu điều này. Tôi chỉ cố gắng thể hiện rõ hơn những gì tôi đang cố gắng đạt được. Cảm ơn mặc dù :) –
Mục đích là gì - bạn đang cố gắng đăng nhập tất cả các tài khoản trong * và * lọc chúng dựa trên liệu chúng có đăng nhập hay không (điều này có thể không đúng)? Hoặc, bạn có muốn đăng nhập chúng vào, * sau đó * lọc chúng dựa trên việc chúng có đăng nhập hay không? Tôi đang yêu cầu điều này theo thứ tự này bởi vì 'forEach' có thể là thao tác bạn muốn trái với' peek'. Chỉ vì nó trong API không có nghĩa là nó không mở để lạm dụng (như 'Optional.of'). – Makoto