第九天Java基础(Stream流)
1. Stream流
解决集合和数组的遍历问题

1.1 获取流
1.所有的colletion集合都可以,使用stream流
//1.list集合
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
//2.set集合
Set<String> set = new HashSet<>();
Stream<String> stream1 = set.stream();
//3.map集合方式一
Map<String,String> map = new HashMap<>();
Set<String> strings = map.keySet();
Stream<String> stream2 = strings.stream();
//3.map集合方式二
Set<Map.Entry<String, String>> entries = map.entrySet();
Stream<Map.Entry<String, String>> stream3 = entries.stream();
2.Stream中提供的静态方法of(…);参数可变,也可以传递数组
Integer []i = {1,2,3,4,5};
Stream<Integer> i1 = Stream.of(i);
1.2 常用的方法
1.forEach(Consumer接口);//遍历、Consumer属于消费型接口、没有返回值、所以forEach方法属于终结方法、参数可以使用Lambda表达式书写。
非终结方法(终结)
Stream<String> stream = Stream.of("A","B","C");
stream.forEach((name)->System.out.prinln(name))
2.filter(Predicate);//过滤,Predicate属于元素判断型接口,有返回值,所以属于非终结方法(延迟)
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<>();
arr.add("张无忌");
arr.add("张三丰");
arr.add("曾阿牛");
arr.add("张大头");
arr.stream().filter(name -> name.startsWith("张"))//1.对“张”进行筛选
.filter(name->name.length()==3)//2.对长度为3的进行筛选
.forEach(name-> System.out.println(name));
}
3.map();\映射、类型转化(延迟)
Stream<String> stream = Stream.of("1","1","1","2");//将一个String类型的数组
Stream<Integer> stream1 = stream.map((String s) -> {
return Integer.parseInt(s);//转化为Integer类型
});
4.count();//方法统计元素个数,返回lang类型数据,(终结)
5.limit(long n);//取用前几个,截取前几个元素,(延迟)
6.skip(long n);//跳过前几个元素,截取后面的。(延迟)
7.concat(Stream a,Stream b);//组合两个Stream,返回一个新的Stream 流。静态的方法,可以使用类名调用。
1.3 特点
属于管道流,第一个流调用方法后,进入第二流,第一个流就关闭了,就像流水线
练习:
one集合中抽取长度为3的元素放入one1集合中,
one1集合抽取前三个放入one2集合中。
tow集合中抽取开头为”张“的元素放入tow1集合中,
tow1集合抽取三后面的元素放入tow2集合中。
one2加tow2集合产生新集合,集合转化为对象集合
1.普通for循环
ArrayList<String> one = new ArrayList<>();
one.add("艾AA");
one.add("曾大爷");
one.add("逻辑");
one.add("丁怡");
one.add("云天明");
one.add("刘慈欣");
one.add("张云雷");
ArrayList<String> one1 = new ArrayList<>();
for (String name:
one) {
if (name.length()==3){
one1.add(name);
}
}
ArrayList<String> one2 = new ArrayList<>();
for (int i = 0 ; i < 3;i++) {
one2.add(one1.get(i));
}
ArrayList<String> tow = new ArrayList<>();
tow.add("张二大爷");
tow.add("张三");
tow.add("张无忌");
tow.add("李云迪");
tow.add("尼古拉斯赵四");
tow.add("云天明");
ArrayList<String> tow1 = new ArrayList<>();
for (String s : tow) {
if(s.startsWith("张")){
tow1.add(s);
}
}
ArrayList<String> tow2 = new ArrayList<>();
for(int i=0 ; i < 3 ; i++){
tow2.add(tow1.get(i));
}
ArrayList<Penter> three = new ArrayList<>();
for (String s : one2) {
three.add(new Penter(s));
}
for (String s : tow2) {
three.add(new Penter(s));
}
for (Penter penter : three) {
String string = penter.toString();
System.out.println(string);
}
}
2.Stream流
ArrayList<String> one = new ArrayList<>();
one.add("艾AA");
one.add("曾大爷");
one.add("逻辑");
one.add("丁怡");
one.add("云天明");
one.add("刘慈欣");
one.add("张云雷");
Stream<String> limitA = one.stream().filter((name) -> name.length() == 3).limit(3);
ArrayList<String> tow = new ArrayList<>();
tow.add("张二大爷");
tow.add("张三");
tow.add("张无忌");
tow.add("李云迪");
tow.add("尼古拉斯赵四");
tow.add("云天明");
tow.add("张四");
tow.add("张五忌");
Stream<String> limitB = tow.stream().filter((name) -> name.startsWith("张")).skip(3);
Stream<String> concat = Stream.concat(limitA, limitB);
concat.map((name)->new Penter(name)).forEach((name)-> System.out.println(name));
1501

被折叠的 条评论
为什么被折叠?



