|
|
|
|
//第一块内容:Stream流的概述
1.先得到集合或者数组的Stream流 |
2.把元素放上去 |
3.然后用Stream流简化API来方便操作元素 |
利用Stream流求一个字符串集合中的姓都相同,且全名长度为2(简单案例主要用于熟悉
Stream的作用)
List <String>list=new ArrayList<>();
Collections.addAll(list,"高世", "额" ,"高豪","高世豪","呃呃");
System.out.println(list);
//由于长度有限,下面两行代码看成一行,代表的是将list集合中姓为高并且名称长度为2的集合打印出来
list.stream().filter(s -> s.startsWith("高")).filter(s -> s.length()==2).forEach(s -> System.out.println(s));
//第二块内容:Stream流的获取
获取Collection集合流和Map集合流以及数组集合流(右边输入流然后(回车+ALT)+第一个内容,即可快捷生成避免出错)
//Collection集合获取流
Collection<String>collection=new ArrayList<>();
Stream<String> CollectionStream = collection.stream();
//Map集合获取流
Map<String,Integer>map=new HashMap<>();
//key流
Stream<String> keyStream = map.keySet().stream();
//value流
Stream<Integer> valueStream = map.values().stream();
//keyAndValue对流(整体流)
Stream<Map.Entry<String, Integer>> KeyAndValueStream = map.entrySet().stream();
//数组集合获取流
String[]name={"世","高","豪",};
Stream<String> nameStream = Arrays.stream(name);//方式1
Stream<String> name1 = Stream.of(name);//方式2
//第三块内容:Stream流常用API,以下是部分代码使用方法
/*Stream流常用API * forEach:逐一处理(遍历) * count:统计个数(用Long接取) * filter:过滤元素 * limit:取前几个元素 * skip:跳过前几个 * map:加工方法 * concat:合并流 *distinct:去除重复流 * */
/*Stream流常用API
* forEach:逐一处理(遍历)
* count:统计个数(用Long接取)
* filter:过滤元素
* limit:取前几个元素
* skip:跳过前几个
* map:加工方法
* concat:合并流
*distinct:去除重复流
* */
List<String>list=new ArrayList<>();
Collections.addAll(list,"高世", "额" ,"高豪","高世豪","呃呃");
list.stream().filter(s -> s.startsWith("高")).forEach(s -> System.out.println(s));//代表首字母为""中内容的流
System.out.println("-----------------------");
long count = list.stream().filter(s -> s.length() == 3).count(); System.out.println(count);//含义为长度为3的流字符有几个
System.out.println("-----------------------");
list.stream().filter(s -> s.startsWith("高")).limit(2).forEach(s -> System.out.println(s));//求性别为高的前两个字符输出
System.out.println("-----------------------");
list.stream().filter(s -> s.startsWith("高")).limit(2).forEach( System.out::println);//这行代码等价于上一行代码,其原理是Lambda简化机制
System.out.println("-----------------------");
list.stream().filter(s -> s.startsWith("高")).skip(1).forEach(System.out::println);//filter筛选后剩下元素跳过skip中数字个数打印出
System.out.println("-----------------------");
list.stream().map(s -> "LOL"+s).forEach(System.out::println);//map加工方法
//合并流
Stream<String> stringStream1 = list.stream().filter(s -> s.length() == 2);//长度为2的所有字符
Stream<String> stringStream2 = Stream.of("java", "Spring");//加入括号内的字符
Stream<String> stringStream1AndStringStream2=Stream.concat(stringStream1,stringStream2);
stringStream1AndStringStream2.distinct().forEach(System.out::println);//输出合并流内容
//!!!!!!!!!!!!!!distinct()可用于去除重复的流
//第四块内容:收集Stream流
Stream流的收集是将Stream流得到的内容转为集合or数组
List<String>list=new ArrayList<>();
Collections.addAll(list,"高世", "额" ,"高豪","高世豪","呃呃");
Stream<String> str = list.stream().filter(s -> s.startsWith("高"));//姓为高的流
List<String> collect = str.collect(Collectors.toList());//Collectors.toList()表示转为list集合调用的API
System.out.println(collect);
System.out.println("-------------------------------");
Stream<String> newStr = list.stream().filter(s -> s.startsWith("高"));//姓为高的流
Object[] objects = newStr.toArray();//由于泛型对流的内容无影响,所以用Object来接受数据
System.out.println("数组"+Arrays.toString(objects));