java stream filter map collector使用

    @Testpublic void demo1(){ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < 10; i++){list.add(i);}/*** map* collector* filter* stream*///stream顺序处理,底层用来fork/Join框架System.out.println("stream顺序处理");Stream<Integer> stream = list.stream();long s = System.currentTimeMillis();
//        stream.forEach(elem -> System.out.println(elem));
//        System.out.println(stream);long e = System.currentTimeMillis();long spendTime = (e - s)/1000;//并行流式处理System.out.println("并行流式处理");long ps = System.currentTimeMillis();Stream<Integer> integerStream = list.parallelStream();System.out.println("总结:");
//        integerStream.forEach(elem -> System.out.println(elem));long pe = System.currentTimeMillis();long spendTime2 = (pe - ps)/1000;System.out.println(spendTime + " s" + "\t" + spendTime2 + "s");/*** map功能:*  1.从原始的list中取值后,通过stream返回一个新的集合*/List<String> streamListMap = list.stream().map(n -> String.valueOf(n * 2)).collect(Collectors.toList());System.out.println("map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素");System.out.println(streamListMap);/*** collector收集器:* 将流中的元素放入到一个List集合当中*/System.out.println("将流中的元素放入到一个List集合当中");List<String> collectList = streamListMap.stream().collect(Collectors.toList());System.out.println(collectList);//filter//过滤奇数List<Integer> collectFilter = list.stream().filter(elem -> {return elem % 2 == 0;}).collect(Collectors.toList());System.out.println(collectFilter);List<Integer> collectFilter2 = list.stream().filter(elem -> elem % 2 == 0).collect(Collectors.toList());System.out.println(collectFilter2);//stram map filter collector//distinct去重ArrayList<Integer> intList = new ArrayList<Integer>(){{add(1);add(1);add(2);}};System.out.println("distinct去重");Stream<Integer> distinct = list.stream().distinct();System.out.println(distinct.collect(Collectors.toList()));//sort排序ArrayList<People> peopleObjects = new ArrayList<People>(){{add(new People("wangwu", 30));add(new People("zhangsan", 10));add(new People("lisi", 20));}};System.out.println("sort排序");//正序System.out.println("正序排序");Stream<People> sortedList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge));System.out.println(sortedList.collect(Collectors.toList()));//倒序System.out.println("降序");Stream<People> reversedSortList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge).reversed());System.out.println(reversedSortList.collect(Collectors.toList()));//peek 对对象的进行操作System.out.println("peek 对对象的进行操作");Stream<People> peekStream = peopleObjects.stream().peek(elem -> elem.setAge(elem.getAge() * 2));System.out.println(peekStream.collect(Collectors.toList()));//截断limitSystem.out.println("limit取出前三个");Stream<Integer> limitStream = list.stream().limit(3);System.out.println(limitStream.collect(Collectors.toList()));//跳过skipSystem.out.println("skip跳过前五个");Stream<Integer> skipStream = list.stream().skip(5);System.out.println(skipStream.collect(Collectors.toList()));}class People{String name;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public People(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "PeekObject{" +"name='" + name + '\'' +", age=" + age +'}';}}

控制台打印:

stream顺序处理
并行流式处理
总结:
0 s	0s
map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
将流中的元素放入到一个List集合当中
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]
distinct去重
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sort排序
正序排序
[PeekObject{name='zhangsan', age=10}, PeekObject{name='lisi', age=20}, PeekObject{name='wangwu', age=30}]
降序
[PeekObject{name='wangwu', age=30}, PeekObject{name='lisi', age=20}, PeekObject{name='zhangsan', age=10}]
peek 对对象的进行操作
[PeekObject{name='wangwu', age=60}, PeekObject{name='zhangsan', age=20}, PeekObject{name='lisi', age=40}]
limit取出前三个
[0, 1, 2]
skip跳过前五个
[5, 6, 7, 8, 9]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断对象所有属性是否全部为空

private boolean checkObjFieldIsNotNull(Object obj){try {for (Field f : obj.getClass().getDeclaredFields()) {f.setAccessible(true);if (f.get(obj) ! null) {return true;}}}catch (IllegalAccessException e){}return false; }

redis主从搭建和分片集群搭建

文章目录redis主从搭建搭建一主一从&#xff1a;下载安装redis&#xff1a;两台机器都需要操作权限认证理解主从复制原理、同步数据集全量同步三个阶段&#xff1a;增量同步&#xff1a;心跳检测redis哨兵模式部署方案搭建配置哨兵模式原理建立连接获取主服务器信息获取从服务器…

为什么是先更新数据库再删除缓存,而不是更新缓存?

一开始看很多人说更新数据库后删除缓存&#xff0c;然后有人说是更新缓存时需要遍历list或者hash查找导致慢&#xff0c;我!#&((&(&^%&%&m&*&&#xff08;&#xff09;&&#xff0c;然后百度一堆。。。。。。。&#xff0c;然后用Bing搜索找到…

如何利用redis实现秒杀系统

文章目录题记利用Watch实现Redis乐观锁题记 在线思维导图总结&#xff1a;redis大纲 利用Watch实现Redis乐观锁 乐观锁基于CAS&#xff08;Compare And Swap&#xff09;思想&#xff08;比较并替换&#xff09;&#xff0c;是不具有互斥性&#xff0c;不会产生锁等待而消 耗…

教你如何使用redis分布式锁

文章目录一、redis客户端实现应用1.利用set nx命令实现分布式锁2.利用分布式锁命令 setnx问题1.为什么不直接调用jedis.del(key)方法而采用redislua实现&#xff1f;2.上述两种方式存在的问题&#xff1f;3.根本原因分析二、分布式场景Redission分布式锁的使用1.分布式锁的特性…

【记录保存】批量删除进程

kill -9 ps -ef|grep redis-server | awk {print $2} print $2 选择进程id

本地缓存之Guava简单使用

文章目录使用场景Guava Cache 的优势Guava Cache使用CacheLoaderCallable删除主动删除过期删除基于容量删除引用删除高级用法并发设置更新锁定GuavaCache高级实战之疑难问题GuavaCache会oom&#xff08;内存溢出&#xff09;吗GuavaCache缓存到期就会立即清除吗GuavaCache如何找…

本地缓存之LIFO、LRU、FIFO、LFU实现

文章目录LIFO算法实现LRU算法算法核心实现FIFO算法LFU算法LIFO算法 后进先出,利用栈实现 实现 Testpublic void stackDemo(){Stack<Integer> stack new Stack<>();for (int i 1; i < 4; i){stack.add(i);}ArrayList<Integer> list new ArrayList<…

java中强引用、弱引用、软引用、虚引用学习

文章目录强引用弱引用软引用虚引用将引用之前首先让我们一起回顾一下java对象的生命周期强引用 在实际开发场景中&#xff0c;我们一般使用的都是强引用&#xff0c;只要强引用存在&#xff0c;垃圾回收即使OOM也不会回收&#xff0c;知道强引用释放以后&#xff0c;对象才会被…

mysql left join、right join、inner join、union、union all使用以及图解

左外连接&#xff1a;left join sql语法&#xff1a;LEFT JOIN LEFT OUTER JOIN 首先需要创建两张表做测试&#xff0c;表数据如下所示 table 1 表&#xff1a; table2 表&#xff1a; 查询sql&#xff1a; select * from table1 a LEFT JOIN table2 b on a.idb.id 总结&a…

java 将海外时区转换为北京时区

//默认为上海时区TimeZone tz TimeZone.getDefault();//北京时区tz TimeZone.getTimeZone("GMT8");Date date new Date(System.currentTimeMillis());// 获取默认的DateFormat&#xff0c;用于格式化DateSimpleDateFormat simpleDateFormat new SimpleDateFormat…

Java规则引擎-MVEL表达式解析器

MVEL是一个功能强大的基于Java应用程序的表达式语言。 目前最新的版本是2.0&#xff0c;具有以下特性&#xff1a; (1). 动态JIT优化器。当负载超过一个确保代码产生的阈值时&#xff0c;选择性地产生字 节代码,这大大减少了内存的使用量。新的静态类型检查和属性支持&#xff…

第十八章 Swing程序设计

Swing用于开发桌面窗体程序&#xff0c;是JDK的第二代GUI框架&#xff0c;其功能比JDK第一代GUI框架AWT更为强大、性能更加优良。但因为Swing技术推出时间太早&#xff0c;其性能、开发效率等不及一些其他流行技术&#xff0c;所以目前市场上大多数桌面窗体程序都不是由Java开发…

ConcurrentLinkedQueue常用方法

Testpublic void queuedemo(){ConcurrentLinkedQueue<Integer> queue new ConcurrentLinkedQueue();for (int i 0; i < 5; i){queue.add(i);}//获取元素 不移除头结点for (int i 0; i < 3; i){System.out.println("peek: " queue.peek());}//返回在此…

redis stream学习总结

文章目录streamStream基本概念消息id消息内容增删查改消息生产添加消息 xadd查看消息长度 xlen限制stream最大长度1.xadd 中添加**maxlen**:2.xtrim查询消息 xrange正向排序&#xff1a;消费id从小到大排反向查询&#xff1a;消费id从大到小排删除消息消息消费独立消费 xread消…

jedis StreamEntryID参数解释

//$ 在给定Stream中已经包含的最大ID&#xff0c;在xread、xcreategroup中标识消费着只能消费最新消息 StreamEntryID.LAST_ENTRY; “>” 在消费者组的上下文中使用&#xff0c;在xread、xreadgroup总标识消费未消费过的消息 StreamEntryID.UNRECEIVED_ENTRY; 如果传入的为…

RabbitMQ TTL、死信队列在订单支付场景的应用

基于RabbitMQ的TTL以及死信队列&#xff0c;使用SpringBoot实现延迟付款&#xff0c;手动补偿操作。 1、用户下单后展示等待付款页面 2、在页面上点击付款的按钮&#xff0c;如果不超时&#xff0c;则跳转到付款成功页面 3、如果超时&#xff0c;则跳转到用户历史账单中查看…

阿里巴巴Java开发手册-使用JDK8的Opional类来防止出现NPE问题

/*** https://www.baeldung.com/java-optional*/Testpublic void optionalTest(){Peo peo new Peo("weijie", 18);/*** of、ofNullable*///of 判断peo是否为空&#xff0c;如果不为空程序继续执行Optional<Peo> _of Optional.of(peo);//程序直接抛出NullExce…

阿里巴巴Java开发手册-finally块必须对资源对象、流对象进行关闭操作,如果有异常也要做try-cach操作

对于JDK7及以上版本&#xff0c;可以使用try-with-resources方式 使用方式&#xff1a; /*** https://www.cnblogs.com/itZhy/p/7636615.html* 其实这种方式只是语法糖&#xff0c;反编译以后还是tryCacheThrowTest()中的代码* https://www.cnblogs.com/langtianya/p/5139465.h…