函数式接口的方法引用,和Stream流

能够使用方法引用的常见引用方式
对象名–引用成员方法

		A a = new A();
		a::method -->this::本类的成员方法-->super::父类的成员方法
		String str = "abc";
		str::toUpperCase
类名--引用静态方法
		Math::random
		Integer::parseInt
类--构造引用
Person::new-->new Person(name);
数组--构造引用
		int[]::new-->new int[n];
		String[]::new-->new String[n];
  • 能够理解流与集合相比的优点
    简单
  • 能够通过集合、映射或数组方式获取流
    所有的Collection集合都可以通过stream默认方法获取流;
default Stream<E> stream()
Stream接口的静态方法of可以获取数组对应的流。
	static  Stream of(T... values(数组))
	方法的参数是一个可变参数,而可变参数的底层原理就是一个数组,所有我们可以传递数组
	注意:数组的泛型要使用包装类
  • 能够掌握常用的流操作
7个常用的方法
	count:统计个数
	forEach:遍历
	filter:过滤
	limit:获取前几个 limit(3):获取前3个
	skip:跳过几个	skip(4):跳过4,不要
	map:映射,转换  把一种数据类型的数据转换为另外一种数据类型
	concat:用于组合两个流
  • 能够将流中的内容收集到集合中
	Stream<String> stream = Stream.of("10", "20", "30", "40", "50");
    List<String> list = stream.collect(Collectors.toList());
    Set<String> set = stream.collect(Collectors.toSet());
  • 能够将流中的内容收集到数组中
	Stream<String> stream = Stream.of("10", "20", "30", "40", "50");
    Object[] objArray = stream.toArray();

Stream流中的综合案例,具体用法,都有,可参考:

/*
    Stream综合案例_使用Stream流
    现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行以
    1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中
    2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中
    3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中
    4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中
    5. 将两个队伍合并为一个队伍;存储到一个新集合中
    6. 根据姓名创建Person对象;存储到一个新集合中
    7. 打印整个队伍的Person对象信息。
 */
public class Demo02Test {
    public static void main(String[] args) {
        List<String> one = new ArrayList<>();
        one.add("迪丽热巴");
        one.add("宋远桥");
        one.add("苏星河");
        one.add("老子");
        one.add("庄子");
        one.add("孙子");
        one.add("洪七公");
        one.add("欧阳锋");
        //1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中
        //2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中
        //把集合转换为Stream流
        Stream<String> oneStream = one.stream().filter(name -> name.length() == 3).limit(3);


        List<String> two = new ArrayList<>();
        two.add("古力娜扎");
        two.add("张无忌");
        two.add("张三丰");
        two.add("赵丽颖");
        two.add("张二狗");
        two.add("张天爱");
        two.add("张三");
        //3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中
        //4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中
        //把集合转换为Stream流
        Stream<String> twoStream = two.stream().filter(name -> name.startsWith("张")).skip(2);

        //5. 将两个队伍合并为一个队伍;存储到一个新集合中
        //6. 根据姓名创建Person对象;存储到一个新集合中
        //7. 打印整个队伍的Person对象信息。
        //Stream.concat(oneStream,twoStream).map(name->new Person(name)).forEach(System.out::println);
        Stream.concat(oneStream,twoStream).map(Person::new).forEach(System.out::println);
    }
}

你可能感兴趣的:(函数式接口的方法引用,和Stream流)