簡體   English   中英

java集合流上的map和filter的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM