Java8的新特性以及使用

这篇具有很好参考价值的文章主要介绍了Java8的新特性以及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.  10个示步认Java8lambda表达 

我个Java 8激动lambda达式API了解的代虽然第一lambda达式Java法感到非认为它们把Java错了间做了一lambda表达API习后到了更清晰Java有点泛型见的甚至使Java 1.4,直到绍了使意识基本畏惧 lambda 以及提取之后会喜开启Java 8 lambda之旅~ 
本小先不lambda表达。我java8lambda 

1lambdaRunnable 

// Java 8之前: 

new Thread(new Runnable() { 

 @Override 

 public void run() { 

System.out.println("Before Java8, too much code for too little to do"); 

 } 

}).start();

//Java 8方式: 

new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();

输出: 

too much code, for too little to do 

Lambda expression rocks !! 

这个Java 8 lambda。你使lambda出如码: 

(params) -> expression

(params) -> statement

(params) -> { statements } 

例如参数是在西话, 

() -> System.out.println("Hello Lambda Expressions"); 

如果数, 

(int even, int odd) -> even + odd 

顺便lambda内部名字样能使代简短

在上abxyevenodd 

2使Java 8 lambda 

如果你用Swing API程,件监旧版用例在可lambda好的所示 

// Java 8之前: 

JButton show =  new JButton("Show");

show.addActionListener(new ActionListener() { 

 @Override 

 public void actionPerformed(ActionEvent e) { 

 System.out.println("Event handling without lambda expression is boring"); 

 } 

});

// Java 8方式: 

show.addActionListener((e) -> {

 System.out.println("Light, Camera, Action !! Lambda expressions Rocks"); 

});

Java 使类的  Collections.sort()   Comparator Java  8 中,你可用更可 lambda换掉这个,可在使 lambda  Runnable   ActionListener  

3使Java 8 lambda处理   使lambda表进 

如果使几年 Java,你就知见的并将元素,例如处理订单Java令式Java 8循环可以素进行并处理做并自己写代么容lambda达式,将做分开Java合现并可API集合元素行处理。介绍在使 lambda或不使lambda达式的情以看现在有了  forEach()  ,它并将lambda用在 

// Java 8之前: 
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); for (String feature : features) { 

 System.out.println(feature); 

}

// Java 8之后: 
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); features.forEach(n -> System.out.println(n)); 

// 使Java 8的方法引用更方便,方法引用::双冒号操作符标示, 

// 看起来C++的作用域解析运算符 

features.forEach(System.out::println); 

输出: 

Lambdas

Default Method

Stream API

Date and Time API

列表展示Java 8使用方method referenceC++

双冒Java 8方法 

4使lambda式和Predicate

除了式编Java 8加了  java.util.function

支持 Java 程。其中便 Predicate,使  java.util.function.Predicate 口以 lambda 

达式API加逻辑,的代码支持更。下面Java 8 Predicate 的例,展过滤

集合Predicate于做 

public static void main(args[]){ 
 List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); 

 System.out.println("Languages which starts with J :"); 

 filter(languages, (str)->str.startsWith("J"));

 System.out.println("Languages which ends with a "); 

 filter(languages, (str)->str.endsWith("a"));

 System.out.println("Print all languages :"); 

 filter(languages, (str)->true);

 System.out.println("Print no language : "); 

 filter(languages, (str)->false);

 System.out.println("Print language whose length greater than 4:");  filter(languages, (str)->str.length() > 4);

}

public static void filter(List names, Predicate condition) {   for(String name: names)  { 

 if(condition.test(name)) { 

 System.out.println(name + " "); 

 } 

 } 

}

// filter更好的办法--filter方法改进 
public static void filter(List names, Predicate condition) { 
 names.stream().filter((name) -> (condition.test(name))).forEach((name) -> {  System.out.println(name + " "); 

 }); 

}

可以Stream API 过滤Predicate们定  filter() 换成

里面代码lambda的魔力Predicate允许进行测试个例

 

5lambda达式中加Predicate 

上个java.util.function.Predicate 允许将两  Predicate 于逻操作

ANDOR方法名字and()or()xor()传入  filter() 方法到所

J开始的语  Predicate 示每  Predicate.and()

方法下所示: 

// 甚至可以and()or()xor()逻辑函数来合Predicate 
// 例如要找到所有J开始,长度为四个字母的名字,你可以合并两Predicate并传入 Predicate<String> startsWithJ = (n) -> n.startsWith("J");

Predicate<String> fourLetterLong = (n) -> n.length() == 4;

names.stream()

 .filter(startsWithJ.and(fourLetterLong)) 
 .forEach((n) -> System.out.print("nName, which starts with 'J' and four letter long is : " + 

n));

类似地,使  or()   xor() 介绍点:按需  Predicate 条件

将其使言之传统 Java 命令使  Predicate 接口 lambda 表达

达到 

6Java 8中使lambdaMapReduce 

本例广数式map许你如在  costBeforeTax

列表税后  x -> x*x lambda传到  map() 后者到流

个元  forEach() 使API以得  toList() 

样的方法将  map 其他操作的结果并起。由于收集器在上做端操作,因此之便不重用流了。

至可以用API  reduce() 合成一个 

// 不使lambda表达式为每个订单加12%的税 
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500); for (Integer cost : costBeforeTax) { 

 double price = cost + .12*cost; 

 System.out.println(price); 

}

// 使lambda表达式 
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);

在上map还有一个  reduce() 可以将所值合

并成MapReduce心操功能reduce 另外reduce 

,你使SQL   sum()avg() 或者  count() 函数 

reduce 们接收多API  reduceh() 函数lambda达式

有值行合并IntStream 这样的类有  average()count()sum() 的内方法来  reduce 操作,

mapToLong()mapToDouble() 并不内建Java 

8Map Reduce,我  12% VAT  reduce()  

// 为每个订单加12%的税 

// 老方法 
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500); double total = 0;

for (Integer cost : costBeforeTax) { 

 double price = cost + .12*cost; 

 total = total + price;

}

System.out.println("Total : " + total); 

// 新方法 
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500); 
double bill = costBeforeTax.stream().map((cost) -> cost + .12*cost).reduce((sum, cost) -> sum + cost).get();

System.out.println("Total : " + bill); 

7String 

 Java 大规模集,而使 lambda 达式 API 数据

是惊一个  filter() 方法  Predicate 对象可以lambda达式滤逻

辑。lambdaJava,将 

// 创建一个字符串列表,个字符串长度大2
List costBeforeTax = Arrays.asList("abc","bcd","defg","jk");
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered); 

输出: 
Original List : [abc, , bcd, , defg, jk], filtered list : [abc, bcd, defg] 

另外  filter() 有个活中常会使filter()法则是获得一个每个 

8应用函数 

我们通常需要对列表的每个元素使用某个函数,例如逐一乘以某个数、除以某个数或者做其它操作。这些操

很适  map() 以将逻辑lambda表达  map() 集合各个

转换 

// 将字符串换成大写并用号链接起来 
List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada"); String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", ")); System.out.println(G7Countries); 

输出: 

USA, JAPAN, FRANCE, GERMANY, ITALY, U.K., CANADA

9建一列表 

本例  distinct() 行去 

// 用所有不同的数字创建个正方形列表 
List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4); 
List<Integer> distinct = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList()); System.out.printf("Original List : %s,  Square Without duplicates : %s %n", numbers, distinct); 

输出: 
Original List : [9, 10, 3, 4, 7, 3, 4],  Square Without duplicates : [81, 100, 9, 16, 49] 

10大值平均 

IntStreamLongStream   DoubleStream 的类用的方法叫做  summaryStatistics() 

以返  IntSummaryStatisticsLongSummaryStatistics   DoubleSummaryStatistic s中元

摘要们用的最  getSum()   getAverage() 

得列及平 

//获取数字的个数、最小值、最大值、总和以及平均 
List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);

IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Highest prime number in List : " + stats.getMax()); 
System.out.println("Lowest prime number in List : " + stats.getMin());
System.out.println("Sum of all prime numbers : " + stats.getSum()); 
System.out.println("Average of all prime numbers : " + stats.getAverage()); 

输出: 

Highest prime number in List : 29 

Lowest prime number in List : 2 

Sum of all prime numbers : 129 

Average of all prime numbers : 12.9 

Java  8 10  lambda 表达是个能需以便

试着例子 

补充从例子中们可以可看到,以写的匿名部类都用 lambda 达式代替了。那么,我们简单谈

lambda&内部 

两者 

1.  this 

(1)  匿名类中this匿名 

(2)  Lambdathislambda的类 

2.  编译 

(1)  匿名.class方式+$+(1,2,3.......)

(2)  Java  lambda 达式。使 Java 7   invokedynamic 

令来 

2.  Java8lambda表达要点2017-12-02-wl 

10,我lambda表达6 

1lambda的使 

预定使  @Functional 带一SAMSingle Abstract Method 单个方法lambda的目标类回类lambda的参,若一法接RunnableComparable  Callable lambda表达似的受声  java.util.function 内的例如  PredicateFunctionConsumer   Supplier那么向其lambda表达 

2lambda和方 

lambda 以使用方 lambda 式提供的 lambda 达式可以这仅单方 

list.forEach(n -> System.out.println(n)); 

list.forEach(System.out::println);  // 使用法引用 

然而改,使,而lambda 

list.forEach((String s) -> System.out.println("*" + s + "*"));

事实lambda类型编译性推来。 

3lambda内部资源 

lambda使用静态、lambda变量捕获 

4lambda也成闭包 

LambdaJava又称所以包的 

5lambda的编 

Lambda部被  invokedynamic 节码使JDK中的  javap 反编class使  javap -p   javap -c -v 命令来看lambda达式生成码。

大致 

private static java.lang.Object lambda$0(java.lang.String); 

6lambda的限 

lambda ,那  final   final 是说不能 lambda 修改义在域外量。 

List<Integer> primes = Arrays.asList(new Integer[]{2, 3,5,7}); 

int factor = 2;

primes.forEach(element -> { factor++; }); 

Error 

Compile  time  error  :  "local  variables  referenced  from  a  lambda  expression  must  be  final  or 

effectively final"

另外访修改 

List<Integer> primes = Arrays.asList(new Integer[]{2, 3,5,7}); 

int factor = 2;

primes.forEach(element -> { System.out.println(factor*element); }); 

输出: 

4

6

10

14

因此变闭类似Python 

3.  Java8Optional类的析(2017-12-02-wl 

身为Java序员家可调用值却为参数去调用别。我先要判断回值是否 null,只有的前提下才能为其法的参数是一Guava API试图JVMScalaCeylonAPI决了这个前一篇文章介绍Scala 如何题。 

新版JavaJava 8 Optional OptionalJavadoc下: 

是一个可null对象isPresent()方法会返trueget() 

下面个探Optional类包两个使 

1Optional.of() 

作用:为nullOptional 

of厂方Optional注意入的不能null果传入参nullNullPointerException  

//调用工厂方法创Optional实例 

Optional<String> name = Optional.of("Sanaulla"); 

//传入参数null,抛NullPointerException.

Optional<String> someNull = Optional.of(null); 

2Optional.ofNullable() 

作用OptionalnullOptional 说明ofNullableof法相以接null 

//下面创建了一个不包含任何值Optional实例 

//例如,值为'null'

Optional empty = Optional.ofNullable(null); 

3Optional.isPresent() 

作用 

说明truefalse 

//isPresent方法用来检Optional实例中是否包含值 

Optional<String> name = Optional.of("Sanaulla"); 

if (name.isPresent()) {

 //Optional实例内调get()返回已存在的值 

 System.out.println(name.get());//Sanaulla 

}

4Optional.get() 

作用:如Optional则将NoSuchElementException 

get方法Optional例中的值NoSuchElementException的例 

//执行下面的代码会输出:No value present

try {

 Optional empty = Optional.ofNullable(null);

 //在空Optional实例上调get(),抛NoSuchElementException

 System.out.println(empty.get()); 

} catch (NoSuchElementException ex) { 

 System.out.println(ex.getMessage()); 

}

5Optional.ifPresent()

作用:如Optional有值其调consumer 
说明ifPresent方法要了Consumer类Consumer象方法。抽象方Java8 lambda表达式传入Optional实例,调ifPresent()可以lambda 

//ifPresent方法接lambda表达式作为参数。 

//lambda表达式Optional的值调consumer进行 

Optional<String> name = Optional.of("Sanaulla"); 

name.ifPresent((value) -> { 

 System.out.println("The length of the value is: " + value.length()); 

});

7Optional.orElse() 

作用回, 

说明:如Optional有值orElse参数。示下: 

Optional<String> name = Optional.of("Sanaulla"); 

Optional<String> someNull = Optional.of(null); 

//如果值不nullorElse方法返Optional实例值。 

//如果null,返回传入的消息 

//输出:There is no value present! 

System.out.println(empty.orElse("There is no value present!")); 

//输出:Sanaulla

System.out.println(name.orElse("There is some value!")); 

8Optional.orElseGet()

作用回, 

orElseGetorElse的默认值orElse法将传入orElseGet

方法Supplier接口 

Optional<String> name = Optional.of("Sanaulla"); 

Optional<String> someNull = Optional.of(null);

//orElseGetorElse法类似,区别在orElse传入的是默认值 

//orElseGet可以接受一lambda表达式生成默认值。 

//输出:Default Value

System.out.println(empty.orElseGet(() -> "Default Value"));

//输出:Sanaulla

System.out.println(name.orElseGet(() -> "Default Value"));

9Optional.orElseThrow() 

作用回,supplier口创 

orElseGet方法入一Supplier接口然而orElseThrowlambda

表达存在 

try {

Optional<String> empty= Optional.of(null); 

 //orElseThroworElse方法类似。与返回默认值不同, 

 //orElseThrow会抛lambda表达式或方法生成的异常  

 empty.orElseThrow(ValueAbsentException::new); 

} catch (Throwable ex) {

 //输出: No value present in the Optional instance

 System.out.println(ex.getMessage()); 

}

ValueAbsentException定义如下 

class ValueAbsentException extends Throwable { 

 public ValueAbsentException() { 

 super();

 }

 public ValueAbsentException(String msg) { 

 super(msg);

 }

 @Override

 public String getMessage() { 

 return "No value present in the Optional instance"; 

 }

} 

10Optional.map()

作用执行mapping函数得到回值nullmapping返回

Optionalmap方法返回Optional 

说明:map 来对 Optional 列操现了 Function 接口的 lambda 

传入 

Optional<String> name = Optional.of("Sanaulla"); 

//map方法执行传入lambda表达式参数Optional例的值进行修改。 

//lambda表达式的返回值创建新Optional实例作map方法的返回值。 

Optional<String> upperName = name.map((value) -> value.toUpperCase()); System.out.println(upperName.orElse("No value found")); 

11Optional.flatMap() 

作用mappingOptional返回OptionalflatMapmap

Funtion法类flatMapmapperOptionalflatMap

Optional装。 

flatMapmapmappingmapmapping函数值可以TflatMapmapping函数必须Optional 

Optional<String> name = Optional.of("Sanaulla"); 
//flatMapmapFunction)非常类似,区别在于传入方法lambda表达式的返回类型。 //map方法中lambda式返回值可以是任意类型,map函数返回之前会包装Optional //flatMap方法中lambda表达式返回值必须Optionl实例 

upperName = name.flatMap((value) -> Optional.of(value.toUpperCase())); System.out.println(upperName.orElse("No value found"));//SANAULLA

12Optional.filter()

作用断言该值OptionalOptional 

说明filter过传入限Optional实例可以lambda 达式。对

filter入实Predicatelambda式。 

Optional<String> name = Optional.of("Sanaulla"); 

//filter方法检查给定Option值是否满足某些条件。 

//如果满足则返回同一Option实例,否则返回Optional 

Optional<String> longName = name.filter((value) -> value.length() > 6);
System.out.println(longName.orElse("The name is less than 6 characters"));//Sanaulla

//另一个例子Optional值不满filter指定的条件。 

Optional<String> anotherName = Optional.of("Sana"); 
Optional<String> shortName = anotherName.filter((value) -> value.length() > 6); //输出:name长度不6 
System.out.println(shortName.orElse("The name is less than 6 characters")); 

总结Optional 

以上Optional过一集中 

1 public class OptionalDemo { 

2

3  public static void main(String[] args) {

4  //Optional实例,也可以通过方法返回值得到。 

5  Optional<String> name = Optional.of("Sanaulla");

6

7  //创建没有值Optional实例,例如值为'null'

8  Optional empty = Optional.ofNullable(null); 

9

10  //isPresent方法用来检Optional实例是否有值。 

11  if (name.isPresent()) { 

12  //get()Optional值。 

13  System.out.println(name.get());

14  }

15

16  try {

17  //Optional实例上调get()NoSuchElementException 

18  System.out.println(empty.get());

19  } catch (NoSuchElementException ex) {

20  System.out.println(ex.getMessage());

21  }

22

23  //ifPresent方法接lambda表达式参数。 

24  //Optional值不为空,lambda表达式会处理并在其上执行操作。 

25  name.ifPresent((value) -> { 

26  System.out.println("The length of the value is: " + value.length()); 

27  });

28

29  //如果有orElse方法会返Optional实例,否则返回传入的错误信息。 

30  System.out.println(empty.orElse("There is no value present!")); 

31  System.out.println(name.orElse("There is some value!")); 

32

33  //orElseGetorElse类似,区别在于传入的默认值。 

34  //orElseGetlambda表达式生成默认值。 

35  System.out.println(empty.orElseGet(() -> "Default Value"));

36  System.out.println(name.orElseGet(() -> "Default Value"));

37

38  try {

39  //orElseThroworElse方法类似,区别在于返回值。 

40  //orElseThrow抛出由传入lambda表达式/方法生成异常。 

41  empty.orElseThrow(ValueAbsentException::new); 

42  } catch (Throwable ex) { 

43  System.out.println(ex.getMessage());

44  }

45

46  //map方法通过传入lambda表达式修Optonal实例默认值。  

47  //lambda表达式返回值会包装Optional实例。 

48  Optional<String> upperName = name.map((value) -> value.toUpperCase());

49  System.out.println(upperName.orElse("No value found")); 

50

51  //flatMapmapFuntion)非常相似,区别在lambda表达式的返回值。 

52  //map方法lambda表达式返回值可以是任何类型,但是返回值会包装Optional实例。 

53  //flatMap方法lambda返回值总Optional类型。 

54  upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));

55  System.out.println(upperName.orElse("No value found"));

56

57  //filter方法检Optiona值是否满足给定条件。 

58  //如果满足返Optional实例值,否则返回Optional 

59  Optional<String> longName = name.filter((value) -> value.length() > 6);

60  System.out.println(longName.orElse("The name is less than 6 characters")); 

61

62  //另一个示例,Optional值不满足给定条件。 

63  Optional<String> anotherName = Optional.of("Sana"); 

64  Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);

65  System.out.println(shortName.orElse("The name is less than 6 characters")); 

66

67  }

68

69 } 文章来源地址https://www.toymoban.com/news/detail-470423.html

到了这里,关于Java8的新特性以及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java8新特性Stream流中anyMatch和allMatch和noneMatch的使用!!!

    判断数据列表中是否存在任意一个元素符合设置的predicate条件,如果是就返回true,否则返回false。 接口定义: boolean anyMatch(Predicate? super T predicate); 方法描述: 在anyMatch 接口定义中是接收 Predicate 类型参数,在Lamdba表达式中 PredicateT 是接收一个T类型参数,然后经过逻辑验证返

    2024年02月08日
    浏览(44)
  • java8新特性,java17新特性

    目前使用最多的jdk版本 相较jdk7主要不同在于 Lambda 表达式和函数式编程 : JDK 8 引入了 Lambda 表达式,使得函数式编程更加便捷。Lambda 表达式允许将函数作为参数传递给方法,以及在集合的操作中更简洁地进行数据处理。 新增的 java.util.function 包提供了函数式接口(如 Funct

    2024年02月11日
    浏览(27)
  • 使用java8 新特性stream流对List<Map<String, Object>>集合进行遍历、过滤、查询、去重、排序、分组

    对于一个ListMapString, Object类型的数据,可以使用Java 8的新特性stream流来进行遍历、过滤、查询、去重、排序、分组等操作。 遍历: 过滤: 查询: 去重: 排序: 分组:

    2024年02月10日
    浏览(46)
  • java8 新特性

    1、lambda表达式 Lambda 是一个 匿名函数,我们可以把 Lambda 表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。 (1)语法 Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为 “-” , 该操作

    2024年02月09日
    浏览(30)
  • Java8常用新特性

    目录 简介 1.默认方法 2..Lambda表达式 3.Stream API 4.方法引用 5.Optional类 Java 8是Java编程语言的一个重要版本,引入了许多令人兴奋和强大的新特性。这些特性使得Java程序更加现代化、灵活和高效。让我们一起来探索一些Java 8的常用新特性吧! 首先,Java 8引入了函数式编程的概念

    2024年01月22日
    浏览(27)
  • JAVA8~17新特性

    目录 一、前言 二、JAVA8 Lambda表达式 Stream API 创建方式 中间操作 终止操作 Optional类 三、JAVA9 模块机制 JShell交互式编程   接口 新增集合工厂方法 四、JAVA10 局部变量类型判断 五、JAVA11 Lambda表达式补充 String方法的补充 全新的HttpClient 使用 六、JAVA12-16 新的switch语法 文本块 新

    2024年02月15日
    浏览(30)
  • Java8新特性-流式操作

    在Java8中提供了新特性—流式操作,通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行,提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢? 目录 什

    2024年02月02日
    浏览(30)
  • Java8新特性整理记录

    方法一:  方法二:   例子:

    2024年02月11日
    浏览(25)
  • Java8新特性—方法引用

    前言 Java 8引入了方法引用(method reference)作为一种语言特性,它可以简化代码,使得代码更加易读和易于维护。方法引用可以被视为Lambda表达式的简写形式,可以用来替代Lambda表达式中只调用一个已有方法的情况。总的来说该特性使得Java代码更加简洁和灵活。 使用场景 J

    2024年02月03日
    浏览(30)
  • Java8新特性lambda学习

    Lambda是一个 匿名函数 ,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 本质: 作为 函数式接口 的实例, 没有接口就没意义了. 这两

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包