java8的表达式_java8中lamba表达式的使用

本文详细介绍了 Java 8 中 Lambda 表达式的使用方法,包括基本语法、函数式接口、方法引用等内容,并展示了如何利用 Lambda 表达式简化代码,提高 Java 编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java8中lamba表达式的使用

发布于 2020-6-14|

复制链接

摘记: (-1)前言  学习lamba表达式是十分重要的,你会发现java变的可爱多了。(0)函数式接口   ..

(-1)前言  学习lamba表达式是十分重要的,你会发现java变的可爱多了。(0)函数式接口  只有一个方法的接口称为函数式接口

```java

JButton jButton = new JButton("123");

jButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {}});

```

等同于

```java

jButton.addActionListener(e->System.out.println("Hello world"));

jButton.addActionListener((e)->System.out.println("Hello world"));

jButton.addActionListener((ActionEvent e)->System.out.println("Hello world"));

jButton.addActionListener((ActionEvent e)->{System.out.println("Hello world");return;});

```

a.规则  A->B  A 部分是传入方法的参数  B 部分是函数体  参数类型以及返回类型如果可以通过上下文推断出来可不写   当参数只有一个而且它的类型可以被推导得知时,该参数列表外面的括号可以被省略   当函数体只有一个语句且返回类型可被推导时{}可省略b.例子

```java

Runnable runnable = ()->System.out.println(sign);

Runnable runnable2 = new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub}

};

通过匿名内部类我们知道run方法是不需要参数的

System.out.println(sign) 相当于run方法的方法体

Comparator lol = (x,y)->x-y;

Comparator lol = (x,y)->{System.out.println(x+y);return x-y;};

new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

// TODO Auto-generated method stub

return 0;

}

};

```

通过匿名内部类我们知道compare方法需要两个参数这时编译通过Comparator中Integer推导出参宿类型及返回类型c.深入  lamba表达式可被看做函数,java.util.function定义了常用的函数式接口  http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html  BiFunction  T 代表第一个参数  U 代表第二个参数  R 代表返回值  这表时T,U,R都需要编译器根据上下文进行类型推导  Consumer  代表e->System.out.println("Hello world")  所以当一个方法需要的是lamba表达式时,参数展现形式是java.util.function中定义的样式(2)方法引用  方法引用是对Lamba表达式的简化  类名::方法名(对象方法、类方法)

```java

int[] oop = {3,1,2,1};

static void sayHello(Integer name)

{

System.out.println(123);

}

Arrays.stream(oop).forEach(Test::sayHello);

Arrays.stream(oop).forEach(s->Test.sayHello(s));

```

构造方法引用:Class::new  数组构造方法引用:TypeName[]::new(3)强制类型转换  有时候编译器通过上下文推导出的返回类型与实际类型不符时需要进类型转换

```java

Stream strings = shapelist.stream().map(s->s.getColor());

s.getColor())

```

s.getColor()返回的是String(4)lamba表达式在java对象中的应用你应该在任何java对象中尝试应用lamba表达式,通则是将这个对象转换成java.util.stream,流有串行并行之分哦!并行流关键字parallelStream数组   Arrays.stream()List、Set   .stream()  String  String.chars...java.util.stream提供了许多方法用来操作流中的数据,去试一试吧http://docs.oracle.com/javase/8/docs/api/java 8英文API,没有找到中文的...(2)对流整体的操作比如我们可以求一个流的的总和

```java

int sum = Arrays.stream(oop).sum();

int sum1 = Arrays.stream(oop).reduce(0,(x,y)->x+y);

```

(3)集合之间的转换  我们可以将ArrayList 转换成ArrayList、Set、HashMap,HashMap甚至是更复杂的a.map()  该方法是映射的意思(一开始我联想到了HashMap),还有mapToDouble等b.collect()  collect()接受Collectors类型的参数,用来将流重新汇合,  Collectors是收集器,Collectors.toList(),Collectors.toMap()、Collectors.groupingBy等c.例子

```java

public class Shape

{

private String color;

public Shape() {

// TODO Auto-generated constructor stub

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public Shape(String color)

{

this.color = color;

}

}

ArrayList colorList = new ArrayList(){

{

add("Red");

add("Blue");

add("Yellow");

}

};

List shapeList = colorList.stream().map(Shape::new).collect(Collectors.toList());

List colos = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toList());

Set colosSet = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toSet());

Map colorMap = colorList.stream().collect(Collectors.toMap(a->a,s->s));

Map shapesMap = shpaeList.stream().collect(Collectors.toMap(s->s.getColor(), s->s));

```

Eclipse点不出getColor()方法,还以为用法不对...

```java

Map> shapeMapSet = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.toSet()));

Map>> shapeMap3 = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.groupingBy(s->s.getColor(),Collectors.toList())));

```

(4)集合本身的操纵  想要改变现有集合而不产生新的集合可以使用

```java

Iterable.forEach(Consumer),Collection.removeAll(Predicate),List.replaceAll(UnaryOperator),List.sort(Comparator)和Map.computeIfAbsent()等

shpaeList.sort(Comparator.comparing(Shape::getColor));

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值