Lambda表达式之常用流操作


collect(toList())

collect(toList())方法由Stream里的值生成一个列表,是一个及早求值操作。

public class collect {
   public static void main(String[] args) {
      List list = 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) {
      List list = 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) {
        List list = 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) {
        List list1 = 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]