1、 stream是什么?有什么作用?结合了什么技术?
答:简化集合、数组操作的API,结合了lambda表达式。
2、说说stream流处理数据的步骤是什么?
先得到集合或者数组的stream流。
然后调用stream流的方法对数据进行处理。
获取处理的结果。
获取stream流
1、List集合获得stream流
COllection<String> list =new ArrayList<>();
stream <String> s= list.stream();
2、Map集合获得Stream流
Map<String,Integer> map=new HashMap<>();
Stream<string>s2= map.keyset().stream();
Stream<string>s3= map.values().stream();
Stream<Map.Entry<String,Integer>>s4=map.entrySet().stream();
3、数组获得Stream流
Stream<String>s5=Stream.of(names);
Stream流常见使用方法(中间流和终结流)
List<String> list=new ArrayList<>();
list.add("小明");
list.add("小红");
list.add("小张");
list.add("小梁");
list.add("小米");
list.stream().filter(s->s.startsWith('张')&&s.length()==2).forEach(System.out::println);
在这个例子中,符合条件的字符串 "小明"
、"小红"
、"小张"
、"小梁"
和 "小米"
都会被打印出来,因为它们都是以 "小"
开头且长度为 2 的字符串。
scores.stream().sorted().forEach(System.out::println);//默认升序
scores.stream().sorted((s1,s2)->Double.compare(s2,s1)).forEach(System.out::println);
//默认降序
scoscores.stream().sorted((s1,s2)->Double.compare(s2,s1)).forEach(System.out::println);
//默认降序res.stream().sorted((s1,s2)>Double.compare(s2,s1)).limit(2).forEach(System.out::println);
//只要前两名
scores.stream().sorted((s1,s2)>Double.compare(s2,s1)).skip(2).forEach(System.out::println);
//跳过前两名
scores.stream().sorted((s1,s2)>Double.compare(s2,s1)).distinct.skip(2).forEach(System.out::println);
//跳过前两名且去重
scores.stream().map(s -> "加10分后:"+(s+10)).forEach(System.out::println);//对数据进行加工,并返回对应的新流。
终结方法
调用完stream,不会返回stream流。
将流收集到数组和集合当中去
Stream<String>s1=list.stream().filter(s->s.startsWith('张'));
List<String>list1=s1.collect( Collectors.tolist());
//收集到list集合
object [] array=s3.toArray();//收集到数组集合
Map<String,Double>map=teachers.stream().collect(collectors.tomap(teacher::getName,Teacher::getSalary));