java8的新特性怎么使用

63次阅读
没有评论

共计 3537 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章主要介绍“java8 的新特性怎么使用”,在日常操作中,相信很多人在 java8 的新特性怎么使用问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java8 的新特性怎么使用”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

1)Lambda 表达式
 概念:java8 中增加了一个新的语法 --Lambda 表达式,并且引入了一个新的操作符(Lambda 操作符): -  
 Lambda 操作符  -  : -   将 Lambda 表达式分为两个部分:左侧:指定了 Lambda 表达式需要的参数,参数的数据类型可以由编译器的“类型推断”机制推断得出,故可以省略。右侧:指定了 Lambda 表达式的方法体,即 Lambda 表达式要执行的功能。语法格式:格式一:无参数,无返回值
 () -  System.out.println( Hello Lambda! 
 格式二:有一个参数,并且无返回值
 (x) -  System.out.println(x)
 格式三:若只有一个参数,小括号可以省略不写
 x -  System.out.println(x)
 格式四:有两个以上的参数,有返回值,并且  Lambda  体中有多条语句
 (x, y) -  {
 System.out.println( 函数式接口 
 return Integer.compare(x, y);
 格式五:若  Lambda  体中只有一条语句, return  和   大括号都可以省略不写
 (x, y) -  Integer.compare(x, y);
 格式六:Lambda  表达式的参数列表的数据类型可以省略不写,因为 JVM 编译器通过上下文推断出,数据类型,即“类型推断”(Integer x, Integer y) -  Integer.compare(x, y); 

补充:java8 中,接口里可以有 default 方法 (默认方法) 和 static 方法(静态方法),实现类默认会继承 defaul 方法和 static 方法。声明一个函数式接口:@FunctionalInterface public interface FirstInterface {void run(); 1)可以通过 Lambda 表达式来创建函数式接口的对象。2)可以在函数式接口上使用 @FunctionalInterface 注解,这样我们就可以根据该注解来判断这个接口是否是一个函数式接口。3)Java8 内置的四个核心函数式接口 函数式接口 参数类型 返回类型 抽象方法 用途 消费型接口:Consumer T T void void accept(T t) 对类型为 T 的对象执行某一操作。供给型接口:Supplier T 无 T T get() 返回类型为 T 的对象。函数型接口:Function T, R T R R apply(T t) 对类型为 T 的对象执行某一操作,并返回 R 类型的结果。断言型接口:Predicate T T boolean boolean test(T t) 确定类型为 T 的对象是否满足某约束,并返回 boolean 值。//  对 String 类型的对象执行 Lambda 表达式 (x -  System.out.println(x)) 的方法体。Consumer String  strConsumer = x -  System.out.println(x); //  创建一个 Consumer(消费型接口)的对象 strConsumer.accept( Consumer 的 accept 方法!//  执行 FirstInterface firstObj = () -  System.out.println( Hello Lambda! firstObj.run();
1)若 Lambda 方法体中的功能,已经有方法提供了实现,则可以使用方法引用。2)使用操作符  ::  将方法名和对象或类的名字分隔开来。  对象名  ::  实例方法名   类名  ::  静态方法名   类名  ::  实例方法名 Comparator Integer  com1 = (x, y) -  Integer.compare(x, y); Comparator Integer  com2 = Integer::compare; 构造器引用 格式:  类名  :: new Supplier Student  sup1 = () -  new Student(); Supplier Student  sup2 = Student::new; 数组引用 格式: type[] :: new Function Integer, String[]  fun1 = (args) -  new String[args]; Function Integer, String[]  fun2 = String[]::new;
创建 Stream 的方式:1 通过 Collection 中的  stream()  或  parallelStream()  来创建一个 Stream List String  list = new ArrayList (); Stream String  stream = list.stream();  // 获取一个顺序流 Stream String  parallelStream = list.parallelStream();  // 获取一个并行流 2 通过 Arrays 中的 stream(T[] array)创建一个 Stream 3 通过 Stream 中的 of(T... values) 创建一个 Stream generate(Supplier T  s) 创建一个无限 Stream iterate(final T seed, final UnaryOperator T  f) 创建一个无限 Stream
Stream T  filter(Predicate ? super T  predicate) 从流中排除某些元素 Stream T  limit(long n); 将流截断,只保留流中的前 n 个元素 Stream T  skip(long n); 将流中的前 n 个元素剔除掉 Stream T  distinct(); 将流中的元素进行去重操作。根据元素的 hashCode()方法和 equals()方法来确定唯一性。Stream T  sorted(); 将流中的元素进行自然排序 Stream T  sorted(Comparator ? super T  comparator);  将流中的元素按照指定的规则排序 R  Stream R  map(Function ? super T, ? extends R  mapper); 1 说明:将流中的元素进行处理后,用新生成的元素代替原来的元素。注:新元素的类型与旧元素的类型可能不一样。2 参数:一个函数式接口,用传入的函数来生成新的元素。3 举例:Stream String  stream = strList.stream().map(String::toUpperCase); R  Stream R  flatMap(Function ? super T, ? extends Stream ? extends R  mapper); 说明:将流中的每个值都换成另一个流,然后把所有流连接成一个流。
R, A  R collect(Collector ? super T, A, R  collector); 1 说明:将流转换为其它形式,将流中的元素进行分组、拼接等。2 举例:List String  list = strList.stream().map(String::toUpperCase).collect(Collectors.toList());
boolean allMatch(Predicate ? super T  predicate); 检查所有的元素是否都匹配 anyMatch 检查是否有元素匹配 noneMatch 检查是否有元素不匹配 Optional T  findFirst(); 返回第一个元素 Optional T  findAny(); 返回流中任意一个元素 long count(); 返回流中元素的总数 Optional T  max(Comparator ? super T  comparator); 返回流中最大的元素 Optional T  min(Comparator ? super T  comparator); 返回流中最小的元素
1 只有调用终端操作后,所有的中间操作才会去执行,若没有调用终端操作,那么所有的中间操作都将不会执行,这种模式叫做 惰性求值。2 流只能使用一次,即只能调用一次终端操作。

到此,关于“java8 的新特性怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3537字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)