在Java函数中使用Lambda表达式的场景和实现代码
发布时间:2023-06-03 08:06:22
Lambda表达式是Java 8中新增的一个特性,它是一种简洁而又高效的函数式编程的方式。Lambda表达式可以作为函数式接口的实例传递。
1. Lambda表达式的应用场景
在Java中,Lambda表达式可以用于以下几个方面:
1.1. 函数式接口
Lambda表达式最常见的应用场景是函数式接口。函数式接口是只有一个抽象方法的接口。Lambda表达式可以用来代替这个抽象方法的实现。
例如,以下代码中使用了Java 8提供的Predicate接口来筛选出列表中大于10的数字:
List<Integer> numbers = Arrays.asList(1, 10, 15, 20, 25, 30); List<Integer> filteredNumbers = numbers.stream() .filter(n -> n > 10) .collect(Collectors.toList());
1.2. 简化匿名内部类的定义
在Java 7以前,我们需要使用匿名内部类来实现某些接口。
例如,以下代码创建了一个线程,但使用了匿名内部类:
Thread thread = new Thread(new Runnable() {
public void run() {
System.out.println("Hello, world!");
}
});
在Java 8中,我们可以用Lambda表达式来替代这个匿名内部类。以下代码中使用了Lambda表达式来创建一个线程:
Thread thread = new Thread(() -> {
System.out.println("Hello, world!");
});
1.3. 消除冗长的代码
在Java中,有些代码比较冗长,使用Lambda表达式可以减少一些代码量。例如,
以下代码使用了传统的方式来获取一个URL的内容:
URL url = new URL("http://www.example.com/");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
通过使用Lambda表达式,我们可以简化这段代码:
URL url = new URL("http://www.example.com/");
String content = new BufferedReader(new InputStreamReader(url.openStream()))
.lines()
.collect(Collectors.joining("
"));
2. Lambda表达式的实现代码
在Java中,Lambda表达式的实现代码由参数、箭头和表达式三部分组成。以下代码描述了使用Lambda表达式来实现函数式接口的例子:
interface MyInterface {
int doSomething(int x, int y);
}
MyInterface add = (x, y) -> x + y;
MyInterface subtract = (x, y) -> x - y;
System.out.println("3 + 4 = " + add.doSomething(3, 4));
System.out.println("3 - 4 = " + subtract.doSomething(3, 4));
运行以上代码,可以输出:
3 + 4 = 7 3 - 4 = -1
以上代码中,我们首先定义了一个函数式接口MyInterface,然后为其定义了两个Lambda表达式用于实现接口中的方法。add实现了加法,subtract实现了减法。最后,我们分别使用这两个Lambda表达式来计算3+4和3-4,并将结果打印到控制台。
