简体   繁体   中英

Difference between map and filter on a java collection stream

Suppose there is a list say

List<String> myList = new ArrayList<String>();
myList.add("okay");
myList.add("omg");
myList.add("kk");

I am doing this:

List<String> fianllist = myStream.map(item -> item.toUpperCase()).filter(item
->item.startsWith("O")).collect(Collectors.toList());

My question is what the difference between map and filter as both can take a lambda expression as a parameter. Can some one please explain?

By using map , you transform the object values.

The map operation allows us to apply a function, that takes in a parameter of one type, and returns something else.

Filter is used for filtering the data, it always returns the boolean value . If it returns true, the item is added to list else it is filtered out (ignored) for eg :

List<Person> persons = …
Stream<Person> personsOver18 = persons.stream().filter(p -> p.getAge() > 18);

For more details on this topic you can visit this link

map returns a stream consisting of the results of applying the given function to the elements of this stream. In a simple sentence, the map returns the transformed object value.

For example, transform the given Strings from Lower case to Upper case by using the map().

myList.stream().map(s -> s.toUpperCase()).forEach(System.out::println);

filter returns a stream consisting of the elements of this stream that match the given predicate. In a simple sentence, the filter returns the stream of elements that satisfies the predicate.

For example, find the strings which are starting with 'o' by using the filter.

myList.stream().filter(s -> s.startsWith("o")).forEach(System.out::println);

Program:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM