假设有一个列表说
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表达式作为参数。有人可以解释一下吗?
答案 0 :(得分:6)
通过使用地图,您可以转换对象值。
地图操作允许我们应用一个函数,该函数接收一种类型的参数,并返回其他内容。
过滤器用于过滤数据,它总是返回布尔值。 如果它返回true,则将该项添加到列表中,否则将其过滤掉(忽略) 例如:
List<Person> persons = …
Stream<Person> personsOver18 = persons.stream().filter(p -> p.getAge() > 18);
有关此主题的更多详细信息,请访问此link
答案 1 :(得分:1)
map 返回一个流,其中包含将给定函数应用于此流的元素的结果。简而言之,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
。