Lambda表达式之常用流操作
collect(toList())
collect(toList())方法由Stream里的值生成一个列表,是一个及早求值操作。
public class collect { public static void main(String[] args) { Listlist = Stream.of(1,2,3,4).collect(Collectors.toList()); System.out.println(list.equals(Arrays.asList(1,2,3,4))); } }
map
如果有一个函数可以将一种类型的值转换成另外一种类型,map操作就可以使用该函数,将一个流中的值转换成一个新的流。传个map函数的Lambda表达式,其传入的参数和返回值不必是同一种类型。但是Lambda表达式必须是Function接口的一个实例(Function接口是只包含一个参数的普通函数接口。
public class Map { public static void main(String[] args) { Listlist = Arrays.asList("gzz","welcome","to","chengdu"); System.out.println(list.stream().map(x->x.toUpperCase()).collect(Collectors.toList()).toString()); } }
filter
遍历数据并检查其中的元素时,可尝试使用Stream中提供的新方法filter。filter接受一个函数作为参数,该函数用Lambda表达式表示。该Lambda表达式的函数接口是Predicate。
public class Filter { public static void main(String[] args) { Listlist = Arrays.asList("ggg","welcome","to","chengdu"); System.out.println(list.stream().filter(x -> x.startsWith("g")).collect(Collectors.toList()).toString()); } }
flatMap
flatMap方法可用Stream替换值,然后将多个Stream连接成一个Stream。flatMap方法的相关函数接口和map方法的一样,都是Function接口,只是方法的返回值限定为Stream类型罢了。
public class FlatMap { public static void main(String[] args) { Listlist1 = Arrays.asList(0,1,2,3,4,5,6); List list2 = Arrays.asList(3,5,8,9); System.out.println(Stream.of(list1,list2).flatMap(Collection::stream).distinct().collect(Collectors.toList()).toString()); System.out.println(list1.stream().filter( x-> !list2.contains(x)).collect(Collectors.toList()).toString()); System.out.println(list2.stream().filter( x-> !list1.contains(x)).collect(Collectors.toList()).toString()); } }
[0, 1, 2, 3, 4, 5, 6, 8, 9]
[0, 1, 2, 4, 6]
[8, 9]