[英]Java 8. Difference between collection.stream() and Stream.of(collection)
[英]Difference between map and filter on a java collection stream
假設有一個列表說
List<String> myList = new ArrayList<String>();
myList.add("okay");
myList.add("omg");
myList.add("kk");
我正在這樣做:
List<String> fianllist = myStream.map(item -> item.toUpperCase()).filter(item
->item.startsWith("O")).collect(Collectors.toList());
我的問題是 map 和 filter 之間的區別是什么,因為兩者都可以將 lambda 表達式作為參數。 有人可以解釋一下嗎?
通過使用map ,您可以轉換對象值。
map 操作允許我們應用一個函數,它接受一種類型的參數,並返回其他類型的參數。
Filter用於過濾數據,它總是返回布爾值。 如果它返回 true,則該項目被添加到列表中,否則它會被過濾掉(忽略),例如:
List<Person> persons = …
Stream<Person> personsOver18 = persons.stream().filter(p -> p.getAge() > 18);
有關此主題的更多詳細信息,您可以訪問此鏈接
map返回一個流,該流由將給定函數應用於此流的元素的結果組成。 簡而言之,地圖返回轉換后的對象值。
例如,使用 map() 將給定的字符串從小寫轉換為大寫。
myList.stream().map(s -> s.toUpperCase()).forEach(System.out::println);
filter返回一個流,該流由與給定謂詞匹配的該流的元素組成。 在一個簡單的句子中,過濾器返回滿足謂詞的元素流。
例如,使用過濾器查找以 'o' 開頭的字符串。
myList.stream().filter(s -> s.startsWith("o")).forEach(System.out::println);
程序:
import java.util.ArrayList;
import java.util.List;
public class MapAndFilterExample {
static List<String> myList = null;
static {
myList = new ArrayList<String>();
myList.add("okay");
myList.add("omg");
myList.add("kk");
}
public static void main(String[] args) {
System.out.println("Converting the given Strings from Lower case to Upper case by using map");
myList.stream().map(s -> s.toUpperCase()).forEach(System.out::println);
System.out.println("filter which is starting with 'o' by using filter");
myList.stream().filter(s -> s.startsWith("o")).forEach(System.out::println);
}
}
Filter 將謂詞作為參數,因此基本上您是根據條件驗證您的輸入/集合,而映射允許您定義或使用流上的現有函數,例如您可以應用String.toUpperCase(...)
等和相應地轉換您的inputlist
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.