可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看, this.name = name; this.parentId = parentId; this.childList = childList; } } 递归组装树形结构 new Menu(6,"根节点2",1), new Menu(7,"根节点2.1",6), new Menu(8, "-------转json输出结果-------"); System.out.println(JSON.toJSON(collect)); } /** * 递归查询子节点
好久不见,很久没有这么安静的去思考一些内容了,记得很久之前自己说过互联网上还是要谨言慎行的,是的,这是我对自己说的,最新除了在自己朋友圈分享了一点自己的心情,随后就删除了之外,自己也不想把自己的烦心事告诉其它人,避免带来负面消极情绪影响到其它人。
java.util.Comparator; import java.util.function.Consumer; import org.junit.Test; /** * 一 . lambda 表达式的基础语法:JAVA8 import java.util.function.Predicate; import java.util.function.Supplier; import org.junit.Test; /** * Java8 System.out.println("耗时时间为:" + Duration.between(start, end).toMillis() + "毫秒"); } /** * 使用JAVA 8 import java.time.temporal.TemporalAdjusters; import java.util.Set; import org.junit.Test; /** * JAVA8 "指定日期格式转化 : " + ofPattern.format(localDateTime)); } /** * 获取所有时区 */ @Test public void test8(
2019.1\lib\idea_rt.jar=59655:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1\bin" -Dfile.encoding=UTF-8 _201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\user\ideaTest\java8 \target\classes" com.mobius.vision.jdk8.Test3 NIHAO XIAOMING NIHAO XIAOMING NIHAO XIAOMING Lamdba表达式的作用 return biFunction.andThen(function).apply(a,b); } Lambda表达式的一些操作 package com.mobius.vision.jdk8; 流操作的分类: 惰性求值 及早求值 List<Integer> list = Arrays.asList(2, 4, 5, 6, 8); list.stream().map
转载:猿天地 链接:http://cxytiandi.com/blog/detail/2220 Stream 作为 Java 8 的一大亮点,我个人是非常喜欢用的,用起来爽多了。
概述 Java8 API中添加了一个新的抽象成为流Stream,可以以一种声明的方式处理数据。 Stream与java.io包中的InputStream和OutputStream是完全不同的概念。 Java8中的Stream是对集合对象功能的增强,专注与对集合对象进行各种非常便利、高效的聚合操作,或大批量数据操作。
简介 Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合类数据的效率。 ,"David","Feezor"); Employee e7 = new Employee(7,68,"F","Melissa","Roy"); Employee e8 = new Employee(8,79,"M","Alex","Gussin"); Employee e9 = new Employee(9,15,"F","Neetu","Singh" M","Naveen","Jain"); List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, 6,15,"M","David","Feezor"); Employee e7 = new Employee(7,68,"F","Melissa","Roy"); Employee e8
但是输出虽然会把LocalDate和LocalTime一起输出,但是 中间会加一个时区标识符 2017-09-28T17:07:52.906 7.时间比较 isAfter(),判断时间是否在另一时间之后 //引自Java8 1); a.isAfter(b) == false a.isAfter(a) == false b.isAfter(a) == true 相应的isBefore(),判断时间在另一时间之前 //引自java8 内部使用的是compareTo0() 方法,采用的是先比较年,然后月,然后日 //引自java8源码 int compareTo0(LocalDate otherDate) { int
不出意料,小伙伴们的项目应该都是基于 Java 8 的吧! 这和之前的 Java 社区报告的结果类似,Java 8 仍是开发人员使用的主要版本,新版本并未“得宠”。 但 Snyk 近期发布的 JVM Ecosystem Report 2021 则指出,开发人员已经逐渐从 Java 8 迁移到了 Java 11。 升级到 8 版本以上的人也比预料的要多。目前,有 61.5% 的人在生产中使用 Java 11,近 12% 的人使用最新版本,即调查期间的 Java 15。 Snyk 方面在报告中指出,这表明开发人员确实将他们的 Java 版本升级到了 Java 8 以上的版本,有关大多数 Java 开发人员都乐于使用 Java 8 的现象似乎正在慢慢瓦解。 不过值得注意的是,仍有一半的 Java 11 用户(目前使用最多的版本)在他们的生产堆栈中使用 Java 8。 ?
Optional是一个没有子类的工具类,是一个可以为null的容器对象,它的主要作用就是用来避免null的检查,防止出现NPE。Optional是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。
StringJoiner是java.util包下的一个工具类,jdk1.8出来的作用是在构造字符串时,可以自动添加前缀、后缀及分隔符,而不需要自己去实现这些添加字符的逻辑。StringJoiner有两个构造方法: 1、只传入分隔符
Java8 API的新特性 要了解面java8,那就需要知道 函数式编程 了,一直以来面向对象编程是软件开发的主流模式,最近几年,由于在并发和事件驱动编程中的优势,函数式编程又变得重要起来。 而Java8是在面向对象的基础上增加了对函数式编程的能力。 Java8的新特性主要包含 lambda表达式、集合类型的流式处理方式、全新的日期API、IO以及并发的增强、JavaFX。 JavaFX JavaFX是用来替代swing进行图形化编程的API 日期/时间 API java8 一个特性是全新设计的日期/时间API。 后续介绍 java.time AI 并发增强 原子计数器、并发哈希映射、并行数组操作 、 可完成的Future 等方面均有改进 js引擎 java8 还内置了一个高质量的javascript引擎–Nashorn
在Java 8中,同样可以使用Comparator对Stream进行排序。 参考: 【1】:Java 8 中的 Streams API 详解 【2】:[译] 一文带你玩转 Java8 Stream 流,从此操作集合 So Easy 【3】:A Guide to Streams in Java 8: In-Depth Tutorial With Examples 【4】:The Java 8 Stream API Tutorial 【5】:java.util.stream 【6】:Introduction to Java 8 Streams 【7】:Java Stream API 【8】:Java8 使用 stream().sorted()对List集合进行排序 【9】:Java 8 Stream sorted() Example
这个规则和java 8之前没什么区别。
查看的代码基于JAVA8。 HashMap继承自AbstractMap,实现了Map、Cloneable、Serializable接口。 默认初始容量为:1<<4 即 16 最大容量为:1<<30 即2的30次方 默认负载因子:0.75 一个桶中的元素数量大于8个时,使用红黑树而不是链表 在resize的过程中,如果桶中的元素小于6个,将树转换为链表 至少应该是(4xTREEIFY_THRESHOLD(默认是8)),以避免调整大小和树化之间的冲突。 Node<K,V>实现了Map.Entry<K,V>接口。 如果输入的数字很大,经过1、2、4、8、16的位移仍然没有都变成1?输入类型是int,int最大为2的31次方。 >>>1位移了2的1次方,>>>4是2的4次方,>>>8是2的8次方,>>>16是2的16次方,一共运算了2的31次方。
37,3000,User.Status.FREE), new User("赵六",21,900,User.Status.BUSY), new User("田七",8,4000 ,User.Status.FREE), new User("王八",8,3500,User.Status.BUSY) ); /** * 查找与匹配
流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,我们可以把它们看成遍历数据集的高级迭代器。
List<String> words = Arrays.asList("Java 8", "Lambdas", "In", "Action"); List<Integer> wordLengths =
new Person("Java旅途",18), 6 new Person("Java旅途",20), 7 new Person("Java旅途",20) 8 5void test13(){ 6 List<Person> personList = Arrays.asList( 7 new Person("Java旅途",18), 8 = new ArrayList<>(); 5 for (Character ch : string.toCharArray()){ 6 list.add(ch); 7 } 8 ) 6 .flatMap(LamdbaApplicationTests::filterCharcter) 7 .forEach(System.out::println); 8} 7008474395345458049L; 4 5 private String name; 6 private int age; 7 private Status status; 8
Java8主要是在原来面向对象的基础上增加了函数式编程的能力。这样就出现了在Java中使用Lambda表达式,将一个函数作为方法的参数来进行传递。 Java8的Stream就是典型的例子,Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 8, 15, 16, 19, 23, 27, 56, 99, 232] [232, 99, 56, 27, 23, 19, 16, 15, 8, 8, 5, 4, 3] [ 3, 4, 5, 8, 8, 15, 16, 19, 23, 27, 56, 99, 232] [232, 99, 56, 27, 23, 19, 16, 15, 8, 8, 5, 4, 20:[{"age":20,"id":4,"name":"DDD"}] } } 以上列子测试数据 List<Integer> data = Arrays.asList(3,4,8,16,19,27,23,99,15,8,5,232,56