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.