[英]Java Using Stream and Lambda Expressions Instead of Iterator
我有一個計算機科學課程的作業,我們的老師希望我們為迭代器使用Stream和Lambda表達式。 我沒有看到警告,而是根據自己的喜好編寫了所需的代碼,這里是:
static List<User> getUsers(String firstName){
Iterator<User> it = users.iterator();
ArrayList<User> tempList = new ArrayList<User>();
while(it.hasNext()){
User tempUser = it.next();
if(tempUser.getFirstName().equals(firstName)){
tempList.add(tempUser);
}
}
return tempList;
}
如何將其轉換為Stream&Lambda代碼? 非常感謝您的回答。
嘗試這個
List<User> tempUsers = users.stream()
.filter(tempUser -> tempUser.getFirstName().equals(firstName))
.collect(Collectors.toList());
//TODO do something useful with it
您的整個方法可以簡化為一個不使用中間變量作為List的語句:
static List<User> getUsers(String firstName){
return users.stream() //iterate
.filter(u -> u.getFirstName().equals(firstName)) //keep good ones
.collect(Collectors.toList()); //collect them in List
}
u
在filter方法中是一個局部變量,它將代表users
列表的每個元素,您可以根據需要命名它 .toCollection(ArrayList::new)
將確保您擁有一個ArrayList而不是toList()
,該列表稍后可以更改,但使用它沒有問題。 無法保證返回的List的類型,可變性,可序列 toList()
或線程安全性; 如果需要對返回的List進行更多控制,請使用 doc中的toCollection(Supplier) 您可以從用戶創建流,然后執行filter
操作以保留名稱等於firstName
所有用戶,然后利用Collectors.toCollection
將結果累加到ArrayList
。
List<User> tempList = users.stream()
.filter(e -> e.getFirstName().equals(firstName))
.collect(Collectors.toCollection(ArrayList::new));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.