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

时间:2016-05-11 06:12:50

标签: java

假设有一个列表说

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表达式作为参数。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:6)

通过使用地图,您可以转换对象值。

地图操作允许我们应用一个函数,该函数接收一种类型的参数,并返回其他内容。

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

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

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

答案 1 :(得分:1)

ma​​p 返回一个流,其中包含将给定函数应用于此流的元素的结果。简而言之,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);
    }
}

答案 2 :(得分:0)

过滤器将谓词作为参数,因此基本上您是在根据条件验证输入/集合,而映射则允许您在流上定义或使用现有函数,例如可以应用String.toUpperCase(...)等。相应地改变您的inputlist