ฉันกำลังอ่านข้อมูลเกี่ยวกับสตรีม Java และค้นพบสิ่งใหม่ ๆ ในขณะที่ดำเนินการไป หนึ่งในสิ่งใหม่ที่ฉันพบคือpeek()
ฟังก์ชัน เกือบทุกอย่างที่ฉันอ่านใน peek บอกว่าควรใช้เพื่อดีบักสตรีมของคุณ
จะเกิดอะไรขึ้นถ้าฉันมีสตรีมที่แต่ละบัญชีมีชื่อผู้ใช้ฟิลด์รหัสผ่านและวิธีการเข้าสู่ระบบ () และ loggedIn ()
ฉันยังมี
Consumer<Account> login = account -> account.login();
และ
Predicate<Account> loggedIn = account -> account.loggedIn();
ทำไมต้องแย่ขนาดนี้
List<Account> accounts; //assume it's been setup
List<Account> loggedInAccount =
accounts.stream()
.peek(login)
.filter(loggedIn)
.collect(Collectors.toList());
เท่าที่ฉันสามารถบอกได้ว่าสิ่งนี้ทำในสิ่งที่ตั้งใจจะทำ มัน;
- รับรายการบัญชี
- พยายามเข้าสู่ระบบแต่ละบัญชี
- กรองบัญชีใด ๆ ที่ไม่ได้เข้าสู่ระบบ
- รวบรวมบัญชีที่เข้าสู่ระบบไว้ในรายการใหม่
อะไรคือข้อเสียของการทำอะไรแบบนี้? เหตุผลใดที่ฉันไม่ควรดำเนินการต่อ? สุดท้ายถ้าไม่ใช่วิธีนี้แล้วล่ะ?
เวอร์ชันดั้งเดิมนี้ใช้เมธอด. filter () ดังนี้
.filter(account -> {
account.login();
return account.loggedIn();
})