多平台统一管理软件接口,如何实现多平台统一管理软件接口
918
2022-11-27
java8新特性 stream流的方式遍历集合和数组操作
前言:
在没有接触java8的时候,我们遍历一个集合都是用循环的方式,从第一条数据遍历到最后一条数据,现在思考一个问题,为什么要使用循环,因为要进行遍历,但是遍历不是唯一的方式,遍历是指每一个元素逐一进行处理(目的),而并不是从第一个到最后一个顺次处理的循环,前者是目的,后者是方式。 所以为了让遍历的方式更加优雅,出现了流(stream)!
1.流的目的在于强掉做什么
假设一个案例:将集合A根据条件1过滤为子集B,然后根据条件2过滤为子集C
在没有引入流之前我们的做法可能为:
public class Demo02NormalFilter {
edMqW public static void main(String[] args) {
List
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
List
for (String name : list) {
if (name.startsWith("张")) {
zhangList.add(name);
}
}
List
for (String name : zhangList) {
if (name.length() == 3) {
shortList.add(name);
}
}
for (String name : shortList) {
System.out.println(name);
}
}
}
现在以流的方式实现同样的功能:
public static void main(String[] args) {
List
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.stream().filter(s->s.startsWith("张")).filter(s-> s.length() == 3).forEach(System.out::println);
从上面的两段代码可以看出流的存在让代码更加优雅。既然是筛选那么就直接用过滤方法就好了。
2.stream的方法
2.1 延迟方法:
这个和lambda表达式的延迟加载的原理一样,它可以进行链式编程,比如 ().filter().map().limit(),可以点下去,到最后一步(方法为count或者foreach)加载数据。这里主要介绍map和concat方法
1.filter,用来过滤
Stream
Stream
result.forEach(name-> System.out.println(name));
2.map
将流中的元素映射到另一个流中,这个是在后期经常用到的,比如方法所接收的返回值是A,但是接收的却是B
这里举两个例子
例子1
将String类型的流转换为Integer 类型
Stream
stringStream.map(str->Integer.parseInt(str)).forEach(System.out::println);
例子2
方法需要返回的是List
public List
List
return categories.stream().map(category -> category.getName()).collect(Collectors.toList());
}
例子3
List
//查询购物车数据(将List
return carts.stream().map(o -> JsonUtils.parse(o.toString(),Cart.class)).collect(Collectors.toList());
3.contract,两个流合并成一个流
Stream
Stream
//写法1
//Stream.concat(streamA, streamB).forEach(System.out::println);
//写法2
Stream
result.forEach(name-> System.out.println(name));
2.2 终结方法:
执行完的结果不能在调用延迟方法。 如 ().filter().count().limit()这样的写法就会报错。
cout方法与foreach方法比较简单,这里不介绍了。
补充知识:JAVA Stream流的forEach遍历
Stream流的forEach:
如果希望在流当中进行元素的遍历操作,可以使用forEach方法:
forEach(Lambda)表达式,对每一个元素都要进行操作。
参数Lambda表达式必须是一个能够消费的一个参数,而且不产生数据结果的Lambda
例如:
Lambda: s -> System.out.println(s);
方法引用:System::println
println其为不会产生返回结果的Lambda
例如:对集合中每个元素的打印输出:
public class StreamForEach {
public static void main(String[] args) {
ArrayList
list.add("abc");
list.add("def");
list.add("ghi");
Stream
// 对每一个元素进行打印输出
streamA.forEach((String s) -> {
System.out.println(s);
});
list.stream().forEach(s -> System.out.println(s));
list.stream().forEach(System.out::println);
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~