范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Lambda表达式

  Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
  JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
  可以对某些匿名内部类的写法进行简化,它是函数式编程思想的一个重要体现,不用关注是什么对象,而是更关注对数据进行了什么操作。 基本格式(参数列表)->{代码} 范例范例一:
  在创建线程并启动时可以使用匿名内部类的写法; 匿名内部类方式: new Thread(new Runnable() {     @Override     public void run() {         System.out.println(Thread.currentThread());     } }).start(); Lambda方式: new Thread(() -> {     System.out.println(Thread.currentThread()); }).start(); 范例二:
  IntBinaryOperator是一个接口,使用匿名内部类的写法调用该方法; 匿名内部类方式: public static int calculateNum(IntBinaryOperator operator) {     int a = 10;     int b = 20;     return operator.applyAsInt(a, b); }  @Test public void testLambda2() {     int i = calculateNum(new IntBinaryOperator() {         @Override         public int applyAsInt(int left, int right) {             return left + right;         }     });      System.out.println(i); } Lambda方式: public static int calculateNum(IntBinaryOperator operator) {     int a = 10;     int b = 20;     return operator.applyAsInt(a, b); }  @Test public void testLambda2() {     int i = calculateNum((int left, int right) -> {         return left + right;     });      System.out.println(i); } 范例三:
  IntPredicate是一个接口。先使用匿名内部类的写法调用该方法; 匿名内部类方式: public static void printNum(IntPredicate predicate) {     int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     for (int i : arr) {         if (predicate.test(i)) {             System.out.println(i);         }     } }  @Test public void testLambda3() {     printNum(new IntPredicate() {         @Override         public boolean test(int value) {             return value % 3 == 0;         }     }); } Lambda方式: public static void printNum(IntPredicate predicate) {     int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     for (int i : arr) {         if (predicate.test(i)) {             System.out.println(i);         }     } }  @Test public void testLambda3() {     printNum((int value) -> {         return value % 3 == 0;     }); } 范例四:
  Function是一个接口,先使用匿名内部类的写法调用该方法; 匿名内部类方式: public static  R typeConver(Function function) {     String str = "1235";     R result = function.apply(str);     return result; }  @Test public void testLambda4() {     Integer result = typeConver(new Function() {         @Override         public Integer apply(String s) {             return Integer.valueOf(s);         }     });     System.out.println(result); } Lambda方式: public static  R typeConver(Function function) {     String str = "1235";     R result = function.apply(str);     return result; }  @Test public void testLambda4() {     Integer result = typeConver((String s) -> {         return Integer.valueOf(s);     });     System.out.println(result); } 范例五:
  IntConsumer是一个接口,先使用匿名内部类的写法调用该方法; 匿名内部类方式: public static void foreachArr(IntConsumer consumer) {     int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     for (int i : arr) {         consumer.accept(i);     } }  @Test public void testLambda5() {     foreachArr(new IntConsumer() {         @Override         public void accept(int value) {             System.out.println(value);         }     }); Lambda方式: public static void foreachArr(IntConsumer consumer) {     int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     for (int i : arr) {         consumer.accept(i);     } }  @Test public void testLambda5() {     foreachArr((int value) -> {         System.out.println(value);     }); } 省略规则参数类型可以省略; public static void foreachArr(IntConsumer consumer) {     int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     for (int i : arr) {         consumer.accept(i);     } }  @Test public void testLambda5() {     foreachArr((value) -> {         System.out.println(value);     }); } 方法体只有一句代码时大括号return和唯一一句代码的分号可以省略; public static void foreachArr(IntConsumer consumer) {     int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     for (int i : arr) {         consumer.accept(i);     } }  @Test public void testLambda5() {     foreachArr((value) -> System.out.println(value)); } 方法只有一个参数时小括号可以省略; public static void foreachArr(IntConsumer consumer) {     int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     for (int i : arr) {         consumer.accept(i);     } }  @Test public void testLambda5() {     foreachArr(value -> System.out.println(value)); } 以上这些规则都记不住也可以省略不记,可通过idea的replaceLambda表达式快速生成lambda表达式; Stream 流
  Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作。 Stream - 特性
  Stream可以由数组或集合创建,对流的操作分为两种: 中间操作,每次返回一个新的流,可以有多个; 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值。
  Stream特性: stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果; stream不会改变数据源,通常情况下会产生一个新的集合或一个值; stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。
  Stream - 创建方式
  Stream创建方式有三种: 通过 java.util.Collection.stream() 方法用集合创建流; 使用java.util.Arrays.stream(T[] array)方法用数组创建流; 使用Stream的静态方法:of()、iterate()、generate()。 import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream;  /**  * @author hos  * @Createdate 2022/3/21 14:40  */ public class StreamCreateType {      public static void main(String[] args) {          /**          * Stream 流的创建有3种方式          *  1. Collection.stream()方法用集合创建          *  2. Arrays.stream(T[] array) 方法用数组创建          *  3. 使用Stream的静态方法:of()、iterate()、generate()          */         //方式一: Collection.stream()方法用集合创建         List list = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9");         // 创建一个顺序流         Stream stream = list.stream();         // 创建一个并行流         Stream stringStream = list.parallelStream();         List collect = stringStream.collect(Collectors.toList());          //方式二: Arrays.stream(T[] array) 方法用数组创建         int[] array = {1, 2, 3, 4, 5};         IntStream stream1 = Arrays.stream(array);         System.out.println(stream1.max().getAsInt());           //方式三: 使用Stream的静态方法:of()、iterate()、generate()         Stream intStream = Stream.of(1, 2, 3, 4, 5, 6);         Stream stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);         // 0 3 6 9         stream2.forEach(System.out::println);          AtomicInteger m = new AtomicInteger(10);         Stream stream3 = Stream.generate(()-> m.getAndIncrement()).limit(3);         //10 11 12         stream3.forEach(System.out::println);     } } Stream - 使用中间操作map
  map,可以将一个流的元素按照一定的映射规则映射到另一个流中;
  map,接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。 filter
  filter,对流中的元素进行条件过滤,符合过滤条件的才能继续留在流中;
  filter,按照一定的规则校验流中的元素,将符合条件的元素提取到新的流中的操作。 distinct
  distinct,去除流中的重复元素; sorted
  sorted(),自然排序,流中元素需实现Comparable接口;
  sorted(Comparator com),Comparator排序器自定义排序。 limit
  limit,可以设置流的最大长度,超出的部分将被抛弃; skip
  skip,跳过流中的前n个元素,返回剩下的元素; flatMap
  flatMap,接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流;
  map只能把一个对象转换成另一个对象来作为流中的元素。而flatMap可以把一个对象转换成多个对象作为流中的元素。 终结操作forEach
  forEach方法,通过 Lambda 表达式的方式遍历集合中的元素;
  forEach,对流中的元素进行遍历操作,通过传入的参数去指定对遍历到的元素进行什么具体操作。 count
  count,用来获取当前流中元素的个数; max&min
  max&min,可以用来或者流中的最值。 collect
  collect,把当前流转换成一个集合;
  collect,把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合;流不存储数据,那么在流中的数据完成处理后,需要将流中的数据重新归集到新的集合里。 reduce
  reduce,把一个流缩减成一个值,能实现对集合求和、求乘积和求最值操作;
  reduce,对流中的数据按照你指定的计算方式计算出一个结果。
  文章来自https://www.cnblogs.com/HOsystem/p/16084816.html

天宫课堂再次开课,干货满满!对比过去学习经历,这一幕让人感动文凝妈悟语天宫课堂第二次开讲,明明应该是大开眼界的兴奋,却被莫名感动到想哭,现在的孩子真是太幸福了。看到一位博主的感慨你们知道中国孩子上课,现在有多豪华,内容有多顶配吗?博主解释说复合思维与思维方法创新复合思维与思维方法创新(三)万有引力思维法。万有引力定律(Lawofuniversalgravitation)是艾萨克。牛顿于1687年在巜自然哲学的数学原理中所发表的一种自然规律红魔7评测骁龙8加持一款为游戏而生的驯龙高手对于游戏手机而言,芯片的能力决定着一部手机的基础表现。作为2022年红魔的开年旗舰,红魔7自然也要选择当前最新的骁龙8移动平台。这颗芯片采用目前领先的4nm工艺,最大核心达3。0G你知道什么叫激光电视吗?激光电视作为近些年的新生事物,不少人都感觉很陌生甚至会产生一些误解,例如激光会不会损害视力激光电视会不会耗电比较大今天就给大家做一个详细的科普,以及选购攻略分享!2015年至202明日主题前瞻今日导读新能源车光伏,该核心器件紧缺或延续至2023年上半年,这家公司自主芯片模块已开始大批量装机应用重要出口国产量下降或超50,该产品价格已突破2011年高位,这家公司两大产品已宁夏深化互联网教育示范区建设原标题宁夏深化互联网教育示范区建设中工网讯(工人日报中工网记者马学礼)记者近日从宁夏回族自治区教育厅获悉,自2018年7月获准建设全国互联网教育示范区以来,经过3年多的实践与探索,中兴手机宣发新品ZTEA2023H和ZTE7532N现在的手机市场基本上被苹果三星以及华为三巨头所占领,其他品牌的手机基本上都是夹缝生存。中兴手机是一款老品牌,想必许多00后基本都没有听过这款手机。其实中兴有着强劲的手机制造实力,只可怕的马斯克从星链计划到自动驾驶,天罗地网中国不是一件好事在近快一个月的乌俄战争由闪电战转为消耗战,众多美企都先后对俄进行了单方面的断供,都纷纷站好了队封杀俄国科技媒体及金融,包括有像苹果谷歌高通英特尔等巨头企业。然而不可思议的是,在这次2022年2月之前骁龙8Gen1旗舰汇总,各有千秋,基本都能用三五年机圈大战今年竞争也是很激烈,今天我们以骁龙新旗舰处理器8Gen1为主要评判,分享下目前几款比较热门的旗舰机型!摩托罗拉egdeX30全球首发骁龙8Gen1处理器的机型,在各家宣传得家用监控不得不重视的问题最近几年越来越多的家庭开始安装家用摄像头,使用一个摄像头父母可以在外面随时监控家里的情况,比如看一下家里的宠物在干嘛看一下孩子有没有在学习啊看一下老人是不是有什么突发状况啊等等。家SpringBoot基于Spring框架,简化Spring应用初始搭建以及开发过程,内嵌tomcat,创建独立的Spring框架,不用配置xml。提供Starter简化Maven配置。starter是
为啥淘宝上2块钱的螺丝都敢包邮,难道不怕亏本吗自从有了淘宝京东这些购物软件,人们足不出户便能买到自己想要的东西,并且价格也很便宜,因此很多年轻人都喜欢网购。有的时候,我们拿起手机逛一逛淘宝,会发现有一些小件商品十分便宜,比如五在流量将要用完时,为什么要降速?再给一些流量会有什么损失?三大运营商推出的不限流量套餐,并不是真正意义上的不限流量。用户当月流量使用量超出某个数值后,会限制网速和限制单月的流量上限,可谓是限量又限速。这是为什么呢,下文说一说。基站资源有限携号转网比提速降费的影响力更大,这不,运营商价格战已开始!如果没记错的话,携号转网从相关政策出来至今已13年,从全国第一个试点城市海南省开启算起已整整10年。直至2018年12月1日,此前的五个试点城市(天津海南江西湖北云南)才正式开启此小米路由器Mesh公测米粉晒奇葩户型花式炫富日前,小米路由器Mesh正式开启0元公测,并宣布新品即将上市。据官方介绍,小米路由器Mesh是一套可以搞定各种家庭环境的WiFi系统,解决全户型网络覆盖问题的路由设备。小米路由器M中国版智能音箱进入上千万家庭201903090920浙江新闻客户端记者祝梅3月8日,由阿里巴巴研发的智能音箱天猫精灵宣布其整体销量已超过千万台,这意味着,由中国主导研发的智能音箱成为全球范围内第三家进入该领域华为nova4魅力三摄,美到极点,这个nova全面精彩!本文来自花粉俱乐部强子z华为nova系列是华为在2016年开辟出的一条全新产品线,nova系列机型主打颜值拍照做工和时尚,自发布以来就受到了消费者尤其是女性消费者的青睐。去年年末,微软新推出的WindowsLite操作系统,它将用于干什么WindowsLite将成为微软ChromeOS的竞争对手,WindowsLite适用于临时用户,教育人员和轻型计算人群。如果您是检查电子邮件,撰写文章,进行演示,听音乐,观看Ne阿里巴巴达摩院的女领导,与女性的印象很不同真正的正能量是成为一个光源,随时望向他,都有温暖柔和的光亮。天下网商记者贡晓丽作为全球最成功的女性之一,谢丽尔桑德伯格在向前一步一书中深刻地剖析了男女不平等现象的根本原因,她认为,微信语音这么方便,为什么越来越多人不再使用?基本绕不开这3点随着21世纪互联网的发展,人们的社交范围不断扩大。为了满足人们对社交的需求,各大社交软件开发公司不得不优化升级自家社交APP的功能。但对于社交APP来说,方便是APP的灵魂。所有功我当了总统,就把亚马逊谷歌脸书都拆分了文观察者网谷智轩已宣布角逐美国2020年大选的人士中,伊丽莎白沃伦(ElizabethWarren)是不得不提的一名首先,她是第一个向下任美国总统之位进军的女性其次,她此前因原住民黑鲨2背部造型跑分成绩曝光!网友还是一如既往的丑?今年的数码圈异常的热闹,友商之间更是互怼成瘾,互怼之余不忘秀肌肉,厂商们似乎已经按耐不住了,纷纷提前曝光自己新机配置,现在,黑鲨游戏手机在微博上宣布将于3月18日举行黑鲨游戏手机2