能够使用方法引用的常见引用方式
对象名–引用成员方法
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 <T> Stream<T> 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);
}
}