假设有一个列表说
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)
有关此主题的更多详细信息,请访问此 链接
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)