java小白零基础(十二)Stream流
1.Stream流
(基于Lambda之后,jdk8又引入一个关于集合类库目前的弊端的解决方案。叫stream流)
入门案例
将list集合 姓张的过滤到另外一个新的集合中
public static void main(String[] args) {//将list集合 姓张的过滤到另外一个新的集合中//然后再将新集合中的名字的长度为3的存到新的集合中List<String> list = new ArrayList<>();list.add("老邢");list.add("张得帅");list.add("张飞");list.add("张开放");list.add("蔡徐坤");List<String> list1 = new ArrayList<>();for (String s : list) {if (s.startsWith("张")) {list1.add(s);}}System.out.println(list1);List<String> list2 = new ArrayList<>();for (String s : list1) {if(s.length() == 3) {list2.add(s);}}System.out.println(list2);}
}
list.stream(). 把一个集合变成Stream流
filter((name)->name.startsWith("张")). 过滤 姓张
filter((name)->name.length() == 3).过滤长度为3 的
forEach((name)-> System.out.println(name)); 遍历
1.1获取Stream对象
根据集合获取流对象:
Collection集合:default Stream stream(); 返回的是一个有顺序的 和集合源数据相关的对象,说白了 就是将集合中的数据变成了另外一种形式而已 (流的形式)
1.11根据list集合获取流对象
ArrayList<String> strings = new ArrayList<>();strings.add("狗蛋");strings.add("老邢");strings.add("二贝");System.out.println(strings);//可以list集合变成一个流对象Stream<String> stream = strings.stream();System.out.println(stream);//内存地址
1.12Stream流对象下 面的方法
方法就是一个功能
| 方法的名字 | 方法的作用 | 方法种类 | 是否支持链式操作 |
|---|---|---|---|
| count | 统计个数 | 终结方法 | 否 |
| forEach | 遍历数据的 | 终结方法 | 否 |
| filter | 过滤数据 | 可以拼接 | 是 |
| limit | 取前几个数据 | 可以拼接 | 是 |
| skip | 跳过前几个 | 可以拼接 | 是 |
| map | 映射方法 | 可以拼接 | 是 |
| concat | 拼接 | 可以拼接 | 是 |
1.2.1count和forEach
count :统计流中的个数,返回值是long类型的数据
forEach: 遍历流中数据的
public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");Stream<String> stream = strings.stream();long count = stream.count();System.out.println(count);//链式操作long count1 = strings.stream().count();System.out.println(count1);//froEach//对此流的每个元素执行操作strings.stream().forEach(new Consumer<String>() {@Override//将流中的数据 赋值 spublic void accept(String s) {System.out.println(s);}});strings.stream().forEach((s)-> System.out.println(s));}
}
1.2.2filter方法
返回由与此给定谓词匹配的此流的元素组成的流。
Stream<T> filter(Predicate<? super T> predicate)public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");strings.add("陈坤");strings.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {//s流中字符串每个的数据boolean b = s.endsWith("坤");return b;}}).filter(new Predicate<String>() {@Overridepublic boolean test(String s) {boolean c = s.startsWith("陈");return c;}}).forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});strings.stream().filter((goudan)->goudan.endsWith("坤")).filter((s)->s.startsWith("陈")).forEach((s)-> System.out.println(s));}
}
1.2.3limit方法
限制输出
import java.util.ArrayList;
import java.util.stream.Stream;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo5 {public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");strings.add("陈坤");strings.add("战三坤");strings.add("损五坤");strings.add("爱坤");//limit 是要前几个数据 根据参数不同strings.stream().limit(5).forEach((s)-> System.out.println(s));strings.stream().limit(5).filter((s)->s.endsWith("坤")).forEach((s)-> System.out.println(s));}
}
1.2.4map方法
处理映射关系的
public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("12");strings.add("13");strings.add("14");strings.add("15");//将字符串数字 转为int类型的数据
// for (String string : strings) {
//
// int i = Integer.parseInt(string);
// System.out.println(i);
// }strings.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {int i = Integer.parseInt(s);return i;}}).forEach((Integer s)-> System.out.println(s));strings.stream().map((s)->Integer.parseInt(s)).forEach((s)-> System.out.println(s));}
}
1.2.5skip方法
跳过前几个值
public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("12");strings.add("13");strings.add("14");strings.add("15");strings.stream().skip(2).forEach((s)-> System.out.println(s));}
}
1.2.6concat合并两个流
ArrayList<String> list1 = new ArrayList<>();list1.add("12");list1.add("13");list1.add("14");list1.add("15");ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");Stream<String> stream = list1.stream();Stream<String> stream1 = strings.stream();//将两个流合并Stream<String> concat = Stream.concat(stream, stream1);concat.forEach((s)-> System.out.println(s));}
}
1.2收集流
stream.collect(Collectors.toList())
stream.collect(Collectors.toSet())
toList(); 将流转为List集合
toSet(); 将流转为Set集合
因为真实的开发的时候,最终的结果还是集合 流只是扮演了中间处理数据的角色
public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");strings.add("陈坤");strings.add("战三坤");strings.add("损五坤");strings.add("爱坤");strings.add("爱坤");//collect 收集的方法//stream.collect(Collectors.toList()) 以什么样的方式收集List<String> list = strings.stream().filter((s) -> s.endsWith("坤")).skip(2).collect(Collectors.toList());System.out.println(list);Set<String> set = strings.stream().filter((s) -> s.endsWith("坤")).skip(2).collect(Collectors.toSet());System.out.println(set);}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
