当前位置: 首页 > news >正文

桂林必去五个景点桂林网站优化注意事项

桂林必去五个景点,桂林网站优化注意事项,公司网站建设 阿里,网站营销 优势Lambda表达式 Lambda表达式规则 Lambda表达式可以看作是一段可以传递的代码#xff0c; Lambda表达式只能用于函数式接口#xff0c;而函数式接口只有一个抽象方法#xff0c;所以可以省略方法名#xff0c;参数类型等 Lambda格式#xff1a;#xff08;形参列表…Lambda表达式 Lambda表达式规则 Lambda表达式可以看作是一段可以传递的代码 Lambda表达式只能用于函数式接口而函数式接口只有一个抽象方法所以可以省略方法名参数类型等 Lambda格式形参列表 - Lambda体 ; 在java中Lambda表达式本质是函数式接口的实现 Runnable runnable () - System.out.println(执行任务) ;形参列表是接口中的抽象方法的形参列表Lambda体 是重写的抽象方法的方法体 Lambda语法 形参列表 中 参数类型可以省略如果只有一个参数小括号可以省略lambda体如果只有一行语句return和 {} 都可以省略 java常见的函数式接口可以根据自己的业务需求重新这些方法简化代码 Consumer消费型接口有参数无返回对参数进行某种操作 void accept(T t);Supplier供给型接口无参有返回返回某个对象 T get();Function函数型接口有参有返回对 T类型的参数进行操作返回 R类型的结果 R apply(T t);private static void extracted() {// FunctionT, R T为入参R为返回结果FunctionInteger,String function (in)-{return in123;};String apply function.apply(12);System.out.println(apply); //12123}Predicate断定型接口有参有返回输入参数T返回boolean值用于判断对象是否满足某个条件 boolean test(T t);其他函数式接口 BiConsumer功能和Consumer类似只是多一个参数BiPredicate功能和Predicate类似同样只是多了一个参数BiFunction功能和Function类似同样只是多了一个参数IntFunction、LongFunction、DobleFunction、ToIntFunction、ToLongFunction、ToDobleFunction 返回对应类型的数据 方法引用 当要传递给Lambda体的操作已经有实现的方法了可以使用方法引用 方法引用是对Lambda的进一步简化本质上就是Lambda表达式而 Lambda 是函数式接口的实例所以方法引用也是函数式接口的实例 语法为 类对象: : 方法名 方法引用 不需要方法的参数调用可分为三种情况 情况1对象 : : 非静态方法 情况2类 : : 非静态方法 在面向对象oop中是不允许的 情况3类 : : 静态方法情况1和情况2 方法引用的要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型完全相同 如下三种写法从直接new到方法引用代码的逻辑是完全一致的 private static void extracted1() {ConsumerString consumer new ConsumerString() {Overridepublic void accept(String s) {System.out.println(s);}};consumer.accept(写法1);}private static void extracted2() {ConsumerString consumer (s)-System.out.println(s);consumer.accept(写法2);}private static void extracted3() {//方法引用是对Lambda的进一步简化用来替换Lambda表达式因为System.out对象的println方法已经实现过了所以只需要直接调用就好了不需要重新实现//接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型完全相同如下参数都是一个字符串返回值都是void所以可以使用参数引用ConsumerString consumer System.out::println;consumer.accept(写法3);}构造器引用 类似与方法应用参数列表和返回值匹配就可以使用构造器引用因为构造器也是方法 类名new同理数组引用可以把数组看作一个类 private static void extracted5() {//下面两种写法都是创建一个 10个长的数组FunctionInteger,String[] function in- new String[in];String[] apply function.apply(10);FunctionInteger,String[] function1 String[]::new;String[] apply1 function1.apply(10);}stream Java8 Stream 与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Java 8 中的 Stream 是对集合Collection对象功能的增强使用的是函数式编程模式它可以被用来对集合进行链状流式的操作专注于对集合对象进行各种非常便利、高效的聚合操作aggregate operation或者大批量数据操作 (bulk data operation)。Stream 不会存储数据也不会改变原对象每次操作都回返回一个新的streamStream 分为顺序流和并行流 一个流式处理可以分为三个部分 获取一个数据源→ 数据转换 → 执行操作获取想要的结果每次转换原有 Stream 对象不改变返回一个新的 Stream 对象可以有多次转换这就允许对其操作可以像链条一样排列变成一个管道。 转换成流 创建流的五种方式 通过 stream 方法把 集合 或数组 Arrays.stream()转换为流通过 Stream.of 方法直接传入多个元素构成一个流 例如Stream.of(10,20,30); 通过 IntStream 或 DoubleStream 构造基本类型的流。 例如IntStream.of(10,20,30); 创建无限流无限流的使用较少 通过 Stream.iterate 方法使用迭代的方式构造一个无限流然后使用 limit 限制流元素个数通过 Stream.generate 方法从外部传入一个提供元素的 供应商来构造无限流然后使用 limit 限制流元素个数 中间操作 过滤 filter根据条件过滤 limit操作也类似于SQL语句中的LIMIT关键字不过相对功能较弱limit返回包含前n个元素的流当集合大小小于n时则返回实际长度 skip操作与limit操作相反如同其字面意思一样是跳过前n个元素 distinct操作类似于我们在写SQL语句时添加的DISTINCT关键字用于去重处理 public class StreamEntity {private String name;private Integer age;private String high; }public static void test() {//向集合中初始化了一些 StreamEntity 对象以供操作ListStreamEntity list getList();//过滤 年龄大于25的对象 后续使用lambda打印list.stream().filter(a - a.getAge() 25).forEach(a - System.out.println(a));//截取 集合中前两条数据 后续使用方法引用打印list.stream().limit(2).forEach(System.out::println);//跳过前两条数据list.stream().skip(2).forEach(System.out::println);//筛选,通过对象的hashcode和equals对集合中的数据进行去重list.stream().distinct().forEach(System.out::println);}映射包含两类映射操作map和flatMap就像sql可以仅输出我们需要的字段数据一样 map可以在filter筛选的基础之上通过map将实体映射成为我们需要的字符串flatMap与map的区别在于 flatMap是将一个流中的每个值都转成一个个流流中的元素也有可能是流然后再将这些流扁平化成为一个流有点类似与集合的addAll调用addAll向集合中添加集合会把集合中的每一个参数都加到目标集合而不是把集合对象加入到目标集合中 //将元素中转换为其他形式或者提取信息 如下提取对象中的年龄并加1list.stream().map(a-a.getAge()1).forEach(System.out::println);//flatMapListListStreamEntity res new ArrayList();res.add(list);res.add(list);//这里已经把集合中的集合全部拆出来了StreamString objectStream res.stream().flatMap(a - a.stream().map(b-b.getName()));objectStream.forEach(System.out::println);排序 sorted进行自然排序如果排序的对象没有实现 Comparator 也就是没有排序规则会报错 sorted(Comparator? super T comparator)如果排序的对象没有实现 Comparator 也可以传入一个比较器 //按照年龄自然排序 list.stream().map(a-a.getAge()).sorted().forEach(System.out::println);//传入比较器 list.stream().sorted((a, b) - a.getAge() - b.getAge()).forEach(System.out::println); //使用方法引用为 list.stream().sorted(Comparator.comparingInt(StreamEntity::getAge)).forEach(System.out::println); 终止操作终端操作 不调用终止操作中间操作是不会执行的调用终止操作产生结果后stream就不能再被使用了 查找 allMatch用于检测是否全部都满足指定的参数行为如果全部满足则返回trueanyMatch则是检测是否存在一个或多个满足指定的参数行为如果满足则返回truenoneMatch用于检测是否不存在满足指定行为的元素如果不存在则返回truefindFirst用于返回满足条件的第一个元素findFirst不携带参数具体的查找条件可以通过filter设置findAny相对于findFirst的区别在于findAny不一定返回第一个而是返回任意一个 // boolean b list.stream().map(a - a.getAge()).allMatch(a - a 30); // 用于返回满足条件的第一个元素查找条件可以通过filter设置 OptionalInteger first list.stream().map(a - a.getAge()).filter(a - a 30).findFirst(); Integer integer first.get()count 返回流中的元素个数max 返回流中的最大值min 返回流中的最小值forEach 内部迭代 long count list.stream().count(); //根据自定义比较器求最大 StreamEntity s1 list.stream().max((a, b) - a.getAge() - b.getAge()).get(); //根据自定义比较器求最小 StreamEntity s2 list.stream().min((a, b) - a.getAge() - b.getAge()).get(); //迭代 list.stream().forEach(a- System.out.println(a.getAge()1));归约 reduce 可以将流中的元素反复结合起来得到一个值 // 获取年龄的总和 Integer s1 list.stream().map(a - a.getAge()).reduce((b, d) - b d).get(); // reduce 的一个参数是初始值 Integer s2 list.stream().map(a - a.getAge()).reduce(0, (b, d) - b d);收集 归约 收集器也提供了相应的归约操作collect 收集需要用过Collectors中返回的Collector将结果收集到指定的结果集中例如 list、map、set 等 //转换为 list ListStreamEntity collect list.stream().collect(Collectors.toList()); //转化为 map MapInteger, StreamEntity collect1 list.stream().collect(Collectors.toMap(a - a.getAge(), a - a)); //转换为 set SetString collect2 list.stream().map(a - a.getName()).collect(Collectors.toSet()); 分组在数据库操作中我们可以通过GROUP BY关键字对查询到的数据进行分组java8的流式处理也为我们提供了这样的功能Collectors.groupingBy来操作集合 分区可以看做是分组的一种特殊情况在分区中key只有两种情况true或false目的是将待分区集合按照条件一分为二 Optional 参考 Google 的 Guava用于尽量避免空指针异常Optional 是一个容器类用于保存任意类型的值代表这个值存在或者保存null代表值不存在 常见方法 创建Optional 对象 empty() 创建空的实例 ofT t,t不能为空 ofNullableT t 获取Optional 对象的值 get方法会在值为null的时候抛出异常可以用ifPresent()方法验证值是否为空orElse()方法可以在创建实例时就指定返回的默认值
http://www.laogonggong.com/news/139258.html

相关文章:

  • 网站运维可以做哪些如何进行网站icp备案
  • 潍坊大型网站建设免费培训课程
  • p2p倒闭 网站开发宁波公司建设网站
  • 新密建设局网站网站建设业务员怎么做
  • 建设彩票网站多少钱正在直播足球比赛
  • 常德找工作网站网站制作五个界面
  • 网站防红链接怎么做的海尔商务网站建设
  • 毕业设计静态网站建设选题依据西安建设科技专修学院网站
  • 天津网站建设 熊掌号wordpress js 统计
  • 网页区设计网站诊断seo的含义是什么意思
  • 海星wap建站asp网站后台管理教程
  • 企业在线购物网站建设gg服务器租用网站
  • 蓟县做网站公司义乌公司网站
  • 广东省高校质量工程建设网站wordpress建商城教程
  • 旅游网站的广告预算怎么做WordPress增加积分系统
  • 网站运营职责新开网络游戏排行
  • 2019银川住房建设规划信息网站心理学网站可以在线做量表
  • 网站后台一般是用什么做的服务公司注册资金多少合适
  • 网站动态小图标互联网平台公司有哪些
  • 成都少儿编程培训机构盐城网站优化服务
  • 30岁做网站编辑网站集约化建设建议
  • 水利局网站建设整改报告做英文网站需要哪些东西
  • 网站建设的岗位名称做网站app怎么赚钱
  • 两学一做网站飘窗网页设计实验报告结果分析
  • 开福区城乡建设局门户网站房屋平面图在线制作网站
  • 做相册网站推荐深圳营销策划公司十强
  • 网站流量少公司网站设计解决方案
  • 网站建设维护 天博网络如何做淘外网站推广
  • 免费的网站生成app微信如何开通小程序
  • 手机网站报价单模板下载红河州网站建设