java集合流上的map和filter之间的区别

Kee*_*ary 0 java

假设有一个列表说

List<String> myList = new ArrayList<String>();
myList.add("okay");
myList.add("omg");
myList.add("kk");
Run Code Online (Sandbox Code Playgroud)

我这样做:

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

我的问题是map和filter之间的区别是两者都可以将lambda表达式作为参数.有人可以解释一下吗?

bob*_*bob 10

通过使用map,您可以转换对象值.

map操作允许我们应用一个函数,该函数接受一种类型的参数,并返回其他内容.

Filter用于过滤数据,它总是返回布尔值.如果它返回true,则将项添加到列表中,否则将其过滤掉(忽略),例如:

List<Person> persons = …
Stream<Person> personsOver18 = persons.stream().filter(p -> p.getAge() > 18);
Run Code Online (Sandbox Code Playgroud)

有关此主题的更多详细信息,请访问此 链接


Nal*_*chu 5

map返回一个流,其中包含将给定函数应用于该流的元素的结果。简而言之,映射返回转换后的对象值。

例如,使用 map() 将给定的字符串从小写转换为大写。

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

过滤器返回一个由该流中与给定谓词匹配的元素组成的流。用一个简单的句子来说,过滤器返回满足谓词的元素流。

例如,使用过滤器查找以“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);
    }
}
Run Code Online (Sandbox Code Playgroud)