最新要闻
- 【天天新视野】最贵国产电动车高合HiPHi X宣发闹乌龙:零百加速45分钟
- 全球信息:杀死110公斤牛 北半球最凶猛的鸟金雕复仇人类:缝了40针
- 热资讯!软嫩多汁 拒绝合成肉:大希地整切牛排55.8元/斤好价
- 新能源车二手车:又红火起来了
- 全球热消息:腾讯今年股价曾腰斩 累计回购超9000万股 耗资超337亿港元
- RX 7900 XTX温度烧到110度 AMD终于回应了:请联系客服支持
- 全球热议:盗版电影画质越发高得可怕 英国正版组织怒出手:嫌疑人落网
- 苹果允许安装第三方商店 但用户愿意吗?
- 【独家】RTX 4070 Ti官方偷跑!跑分都亮出来了
- 东方甄选直播一周年:股价翻800% 腾讯亏惨了
- 京东自营次日达 抗原检测试剂盒4.9元/份:15分钟出值
- 每日焦点!百度“萝卜快跑”首批获准在京开展全无人自动驾驶测试
- 当前观察:洗鞋机竟成了香饽饽!市场一片繁荣
- 2000年来首次发生!苹果2022年第四季度未发布任何新Mac产品
- 当前视讯!扬州高邮湖大桥几十辆车相撞 事故原因又是团雾
- 全球微头条丨湖南汽车商会:汽车平台大涨价 4S店给汽车之家引流费一年最低23万
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【全球独家】复习Stream流,函数式接口,方法引用
【资料图】
今天对这些内容进行了一个复习,以写demo加做笔记的形式
stream能够更加优雅的处理集合、数组等数据,让我们写出更加直观、可读性更高的数据处理代码
创建steam流的方式
set、list能够直接通过.stream()的形式创建steam流而数组需要通过 Arrays.stream(arr); Stream.of(arr);map需要通过entrySet()方法,先将map转换成Set
stream中的api比较多
/** * @author Pzi * @create 2022-12-30 13:22 */@SpringBootTest@RunWith(SpringRunner.class)public class Test2 { @Test public void test1() { List authors = S.getAuthors(); authors .stream() .distinct() .filter(author -> { // 满足这个条件,那么才会被筛选到继续留在stream中 return author.getAge() < 18; }) .forEach(author -> System.out.println(author.getAge())); } // 对双列集合map的stream操作 @Test public void test2() { Map map = new HashMap<>(); map.put("蜡笔小新", 19); map.put("黑子", 17); map.put("日向翔阳", 16); //entrySet是一个包含多个Entry的Set数据结构,Entry是key-val型的数据结构 Set> entries = map.entrySet(); entries.stream() .filter(entry -> { return entry.getValue() > 17; }) .forEach(entry -> { System.out.println(entry); }); } // stream的map操作,提取stream中对象的属性,或者计算 @Test public void test3() { List authors = S.getAuthors(); authors .stream() .map(author -> author.getName()) .forEach(name -> System.out.println(name)); System.out.println(1); authors .stream() .map(author -> author.getAge()) .map(age -> age + 10) .forEach(age -> System.out.println(age)); } // steam的sorted操作 @Test public void test4() { List authors = S.getAuthors(); authors .stream() .distinct() .sorted(((o1, o2) -> o2.getAge() - o1.getAge())) .skip(1) .forEach(author -> System.out.println(author.getName() + " " + author.getAge())); } // flapMap的使用,重新组装,改变stream流中存放的对象 @Test public void test5() { // 打印所有书籍的名字。要求对重复的元素进行去重。 List authors = S.getAuthors(); authors.stream() .flatMap(author -> author.getBooks().stream()) .distinct() .forEach(book -> System.out.println(book.getName())); authors.stream() // 将以authors为对象的stream流 组装成 以book为对象的strem流 .flatMap(author -> author.getBooks().stream()) .distinct() // 将每个book中的category转换成数组,然后将[x1,x2]代表分类的数组转换成stream流,然后使用flapMap将该数组stream流组装成以x1,x2...为对象的stream流 // 将以book为对象的strem流 组装成 以category为对象的stream流 .flatMap(book -> Arrays.stream(book.getCategory().split(","))) .distinct() .forEach(category -> System.out.println(category)); } // 数组转换成stream流 @Test public void test6() { Integer[] arr = {1, 2, 3, 4, 5}; Stream stream = Arrays.stream(arr); stream .filter(integer -> integer > 3) .forEach(integer -> System.out.println(integer)); } @Test public void test7() {// 打印这些作家的所出书籍的数目,注意删除重复元素。 List authors = S.getAuthors(); long count = authors .stream() .flatMap(author -> author.getBooks().stream()) .distinct() .count(); System.out.println(count); } // max() min() @Test public void test8() {//分别获取这些作家的所出书籍的最高分和最低分并打印。 List authors = S.getAuthors(); Optional max = authors.stream() .flatMap(author -> author.getBooks().stream()) .map(book -> book.getScore()) .max((score1, score2) -> score1 - score2); Optional min = authors.stream() .flatMap(author -> author.getBooks().stream()) .map(book -> book.getScore()) .min((score1, score2) -> score1 - score2); System.out.println(max.get()); System.out.println(min.get()); } // stream 的 collect() @Test public void test9() { // 获取所有作者名字 List authors = S.getAuthors(); Set collect = authors.stream() .map(author -> author.getName()) .collect(Collectors.toSet()); System.out.println(collect); //获取一个所有书名的Set集合。 Set collect1 = authors.stream() .flatMap(author -> author.getBooks().stream()) .map(book -> book.getName()) .collect(Collectors.toSet()); System.out.println(collect1); //获取一个Map集合,map的key为作者名,value为List Map> collect2 = authors.stream() .distinct() .collect(Collectors.toMap(author -> author.getName(), author -> author.getBooks())); System.out.println(collect2); } // anyMatch @Test public void test10() { List authors = S.getAuthors(); boolean b = authors.stream() .anyMatch(author -> author.getAge() > 29); System.out.println(b); } // allMatch @Test public void test11() { List authors = S.getAuthors(); boolean b = authors.stream() .allMatch(author -> author.getAge() > 18); System.out.println(b); } // findFirst @Test public void test12() { List authors = S.getAuthors(); Optional first = authors.stream() .sorted(((o1, o2) -> o1.getAge() - o2.getAge())) .findFirst(); first.ifPresent(author -> System.out.println(author)); } // reduce() 的使用 @Test public void test13() { // 使用reduce求所有作者年龄的和 List authors = S.getAuthors(); Integer sum = authors.stream() .distinct() .map(author -> author.getAge()) .reduce(0, (result, element) -> result + element);// .reduce(0, (result, element) -> result + element); System.out.println(sum); } @Test public void test14() { // 使用reduce求所有作者中年龄的最小值 List authors = S.getAuthors(); Integer minAge = authors.stream() .map(author -> author.getAge()) .reduce(Integer.MAX_VALUE, (res, ele) -> res > ele ? ele : res); System.out.println(minAge); } // 没有初始值的reduce()使用 @Test public void test15() { List authors = S.getAuthors(); Optional age = authors.stream() .map(author -> author.getAge()) .reduce((res, ele) -> res > ele ? ele : res); System.out.println(age.get()); } // Optional对象的封装,orElseGet的使用 @Test public void test16() { Optional authorOptional = Optional.ofNullable(null); Author author1 = authorOptional.orElseGet(() -> new Author(1l, "1", 1, "1", null)); System.out.println(author1);// authorOptional.ifPresent(author -> System.out.println(author.getName())); } @Test public void test17() { Optional authorOptional = Optional.ofNullable(null); try { Author author = authorOptional.orElseThrow((Supplier) () -> new RuntimeException("exception")); System.out.println(author.getName()); } catch (Throwable throwable) { throwable.printStackTrace(); } } // Optional的filter()方法 // ifPresent()可以安全消费Optional中包装的对象 @Test public void test18() { Optional optionalAuthor = Optional.ofNullable(S.getAuthors().get(0)); optionalAuthor .filter(author -> author.getAge() > 14) .ifPresent(author -> System.out.println(author)); } // Optional的isPresent()方法,用来判断该Optional是否包装了对象 @Test public void test19() { Optional optionalAuthor = Optional.ofNullable(S.getAuthors().get(0)); boolean present = optionalAuthor.isPresent(); if (present) { System.out.println(optionalAuthor.get().getName()); } } // Optional的map(),将一个 Optional 转换成另一个 Optional @Test public void test20() { Optional optionalAuthor = Optional.ofNullable(S.getAuthors().get(0)); optionalAuthor.ifPresent(author -> System.out.println(author.getBooks())); Optional> books = optionalAuthor.map(author -> author.getBooks()); books.ifPresent(books1 -> System.out.println(books.get())); } // 类的静态方法 @Test public void test21() { List authors = S.getAuthors(); authors.stream() .map(author -> author.getAge()) .map(integer -> String.valueOf(integer)); // lambda方法体中只有一行代码// .map(String::valueOf); } // 对象的实例方法 @Test public void test22() { List authors = S.getAuthors(); Stream authorStream = authors.stream(); StringBuilder sb = new StringBuilder(); authorStream.map(author -> author.getName()) // lambda方法体中只有一行代码,且将参数全部按照顺序传入这个重写方法中 .forEach(str -> sb.append(str)); } // 接口中只有一个抽象方法称为函数式接口 // 方法引用的条件是:lambda方法体中只有一行方法 // 构造器的方法引用 @Test public void test23() { List authors = S.getAuthors(); authors.stream() .map(Author::getName) .map(StringBuilder::new) .map(stringBuilder -> stringBuilder.append("abc")) .forEach(System.out::println); } // steam提供的处理基本数据类型,避免频繁的自动拆/装箱,从而达到省时,提高性能 @Test public void test24() { List authors = S.getAuthors(); authors.stream() .map(author -> author.getAge()) .map(age -> age + 10) .filter(age -> age > 18) .map(age -> age + 2) .forEach(System.out::println); authors.stream() .mapToInt(author -> author.getAge()) .map(age -> age + 10) .filter(age -> age > 18) .map(age -> age + 2) .forEach(System.out::println); } @Test public void test25() { List authors = S.getAuthors(); authors.stream() .parallel() .map(author -> author.getAge()) .peek(integer -> System.out.println(integer+" "+Thread.currentThread().getName())) .reduce(new BinaryOperator() { @Override public Integer apply(Integer result, Integer ele) { return result + ele; } }).ifPresent(sum -> System.out.println(sum)); }}
lambda表达式
lambda表达式只关心 形参列表 和 方法体用在重写抽象方法的时候,一般都是采用lambda表达式的方式来重写
函数式接口
函数式接口:接口中只有一个抽象方法,就称之为函数式接口。在Java中Consumer,Funciton,Supplier
方法引用
方法引用:当lambda表达式的方法体中只有一行代码,并且符合一些规则,就可以将该行代码转换成方法引用的形式可以直接使用idea的提示自动转换这只是一个语法糖,能看懂代码就行,不要过于纠结
【全球独家】复习Stream流,函数式接口,方法引用
【天天新视野】最贵国产电动车高合HiPHi X宣发闹乌龙:零百加速45分钟
全球信息:杀死110公斤牛 北半球最凶猛的鸟金雕复仇人类:缝了40针
热资讯!软嫩多汁 拒绝合成肉:大希地整切牛排55.8元/斤好价
新能源车二手车:又红火起来了
全球热消息:腾讯今年股价曾腰斩 累计回购超9000万股 耗资超337亿港元
环球快消息!特色功能(锐捷智慧教室)
RX 7900 XTX温度烧到110度 AMD终于回应了:请联系客服支持
全球热议:盗版电影画质越发高得可怕 英国正版组织怒出手:嫌疑人落网
苹果允许安装第三方商店 但用户愿意吗?
【独家】RTX 4070 Ti官方偷跑!跑分都亮出来了
东方甄选直播一周年:股价翻800% 腾讯亏惨了
Android Emulator Container 配置
京东自营次日达 抗原检测试剂盒4.9元/份:15分钟出值
每日焦点!百度“萝卜快跑”首批获准在京开展全无人自动驾驶测试
当前观察:洗鞋机竟成了香饽饽!市场一片繁荣
2000年来首次发生!苹果2022年第四季度未发布任何新Mac产品
当前视讯!扬州高邮湖大桥几十辆车相撞 事故原因又是团雾
当前滚动:亲测有效! Studio One 6 V6.0.1 音乐编曲工具 含win/mac版
stm32读写sd卡代码解析和调试总结
前沿热点:Django路由层
全球微头条丨湖南汽车商会:汽车平台大涨价 4S店给汽车之家引流费一年最低23万
焦点热门:与热爱同行 18年魅族用户已是曹操出行CEO:希望有天把Flyme放进车机
环球关注:比亚迪仰望汽车来了!搭载最具颠覆性的尖端技术
天天快讯:太烂没人看?《阿凡达2》全球票房破11亿美元:中国内地贡献排第二
全球热头条丨零百6.9秒、纯电续航100km:坦克500 PHEV亮相广州车展
即时焦点:org.quartz.JobPersistenceException: Couldn't retrieve trigger: invalid stre
焦点热讯:MyBatis分页实现
世界百事通!现代细胞计数分析平台丨OMIQ简介
全球新动态:世界第一国际象棋手3分钟比赛迟到2分半 仅用22秒取胜
今日聚焦!奖金收入143万美元!Faker断层领跑韩国职业选手总奖金榜
跨年冷空气来了!跨年夜最冷大城市排行榜出炉:哈尔滨嗷嗷冷
世界快报:微信支付分大升级:订单信息一目了然 再不必担心扣费不明
全球百事通!卡梅隆R级《蜘蛛侠》电影图曝光:原定小李子主演
世界看热讯:亲测有效! Wondershare UniConverterV14.1.7 Wondershare PDFelement Professiona
今日快讯:基于局部直方图相关算法的近似优化和提速。
焦点速讯:Java集合快速失败和安全失败机制
全球新消息丨Python教程:如何创建多线程?
Django与数据库连接
每日观察!三星手机工业设计要焕然一新了!前奔驰中国首席大牛加盟:全权操刀
世界短讯!全新红旗H6亮相2022广州国际车展:压垮合资中型轿车又一力作
B站跨年晚会节目单官宣:邓紫棋首唱《三体》片尾曲《面壁者》
焦点热讯:Kafka的终极UI工具丨Offset Explorer功能简介
提前加满 2023开年油价第一涨:预计每升多花0.21元
员工超54万!京东为一线员工薪酬福利开支超330亿元
搭配紫光展锐国产芯:微软新Surface RT预计明年夏季推出
MyBatis-ResultMap
环球视讯!魅友人物纪录片《我有一个朋友》首映 80后CEO龚昕:我的青春是魅族
世界实时:搭乘猎鹰9号火箭 韩国首个月球探测器成功入轨:位列世界第七
【新视野】《王者荣耀》2023年首个新版本定了:新英雄莱西全员免费得
焦点观察:3.0T V6发动机卖成白菜价 长城皮卡山海炮上市:22.88万起
AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?
鲁大师12月新机性能/流畅榜发布:小米直接包揽性能榜前三!
【环球时快讯】面包车行驶中车内起火 突然爆炸车顶掀飞数米高
【环球新要闻】大礼包抄底价:良品铺子坚果礼盒1440g装49元
80后宝妈辞职后做沙滩代写:月入过万
JJJJ车厘子有多大?JJJJ车厘子价格是多少?
狱警十七在第几集出现的?狱警十七为什么杀小朵?
锰钢是什么材质的钢材?锰钢板价格多少钱一吨?
泳镜防雾剂怎么使用?游泳镜防雾剂对眼睛的伤害有哪些?
四大满贯赛事是哪些?四大满贯赛事场地类型包括哪些?
西元年是什么意思?西元年和公元年换算表
雪肌精MYV系列产品适合什么肤质?雪肌精MYV系列产品介绍
八仙过海的八仙是哪八仙?八仙过海大结局是什么?
穷兵黩武是什么意思?穷兵黩武打一生肖是什么?
接口自动化测试不想写代码?这款工具强烈推荐
当前时讯:CloudCanal对Online DDL 工具 GH-OST 和 PT-OSC 的支持
【全球新视野】手撕fft算法--fft原理和源码解析
母猪上树是什么意思?母猪上树是什么生肖动物?
变频空调制热一小时多少度电?变频空调和定频空调的区别
三星i9250是什么型号?三星i9250手机参数
金山毒霸和360卫士哪个好?金山毒霸有必要安装吗?
英雄联盟adc是什么意思?英雄联盟adc全部英雄图鉴
半导体激光器的工作原理是什么?半导体激光器的优缺点
今日热闻!理想官方详解为何L9、L8备受欢迎:全世界最先进的增程电动系统
资讯推荐:和苹果iPhone 14一样薄!vivo S16e首销:2099元起
没有科技与狠活 0添加配料表超干净!汇源果汁大促:24.8元2L
169元拿下Wi-Fi 6路由器!荣耀路由X4 Pro首销:可达1500Mbps
世界微资讯!官方剧透理想L7关键细节:皇后座后排超越豪华D级车
世界资讯:【爬虫实战项目】Python爬虫批量下载网易云音乐飙升榜并保存本地(附源码)
世界看热讯:分布式、集群、微服务、微前端、负载均衡的概念
精彩看点:苹果为延长iPhone 14 Pro灵动岛面板使用寿命!要求三星用喷墨打印密封工艺
当前热点-女子放生2.5万斤鲇鱼被起诉:偏肉食动物 入侵能力极强
天天热推荐:不愧电动爹?零下25度暴风雪中的特斯拉Model 3:电池预热45分钟后才充上电
每日快报!mini LED和LCD将要拜拜了 iPad Pro未来会升级OLED屏
能跑1200公里 长城魏牌六座旗舰SUV正式亮相:前脸大改!
关系型数据库 和 非关系型数据库
2022年这5款熟悉的产品向我们告别 太可惜了
全球快播:Lightning再见!第二大手机国印度强推USB-C接口:iPhone必须换
天天滚动:Epic今年终极一送:好评如潮游戏《羞辱》免费领!省173块
全球热推荐:纯钛杯身!小米米家保温杯Ti首批卖光了:30小时众筹金额破50万元
SSD也没人买了?未来三年增速下滑:降价吸引力也不大
世界微资讯!暴雪仍没找到人接盘!《魔兽世界》等国服将停止 网易称服务到最后一刻
世界快资讯丨博客园图片问题
环球快看点丨iPhone 15系列差异化加大:iPhone 15 Plus或大降价
全球信息:我注册B站3736天了!还记得10年前的小破站什么样吗?
每日观察!一年一度的进口游戏版号来了 这次有不少“硬货”!
要闻:威马汽车拿到四川的救命钱!但负面缠身的它还能活过来吗?
简讯:航空工业AS700民用飞艇02架首飞成功:可载9人、能飞10小时
回归童年的美好 守住童年的回忆 那些年你玩过的游戏都有呢