[Java 8] Lambda 表达式实例

Java 8 中的 Lambda 表达式,允许将函数作为形参传递给另外的函数。为了更好地理解,我们用实例的方式来演示如何使用 Lambda 表达式。

[b][size=x-large]1、Lambda 表达式 Hello World[/size][/b]

这是一个最简单的 Lambda 表达式的例子。首先在 main 方法的上面声明了一个接口 HelloWorld,在 main 方法中实现了这个接口,随后调用了接口的唯一方法。

public class LambdaHelloWorld {
interface HelloWorld {
String hello(String name);
}

public static void main(String[] args) {
HelloWorld helloWorld = (String name) -> { return "Hello " + name; };
System.out.println(helloWorld.hello("Joe"));
}
}


[b][size=x-large]2、在 Lambda 表达式中访问局部变量和成员变量[/size][/b]

在这个例子中演示了如何在 Lambda 表达式中访问局部变量和成员变量,请注意 Runnable 接口的用法。

public class LambdaVariableAccess {
public String wildAnimal = "Lion";

public static void main(String[] arg) {
new LambdaVariableAccess().lambdaExpression();
}

public void lambdaExpression(){
String domesticAnimal = "Dog";

new Thread (() -> {
System.out.println("Class Level: " + this.wildAnimal);
System.out.println("Method Level: " + domesticAnimal);
}).start();
}
}


[b][size=x-large]3、Lambda 表达式中的方法传递[/size][/b]

这个例子比前面的更高级一些。对与 Circle 接口,有两个不同的实现。这些实现本身作为参数传递到了另外一个方法中。

public class LambdaFunctionArgument {

interface Circle {
double get(double radius);
}

public double circleOperation(double radius, Circle c) {
return c.get(radius);
}

public static void main(String args[]){
LambdaFunctionArgument reference = new LambdaFunctionArgument();
Circle circleArea = (r) -> Math.PI * r * r;
Circle circleCircumference = (r) -> 2 * Math.PI * r;

double area = reference.circleOperation(10, circleArea);
double circumference = reference.circleOperation(10, circleCircumference);

System.out.println("Area: "+area+" . Circumference: "+circumference);
}
}


[b][size=x-large]4、Lambda 表达式的初始化[/size][/b]

import java.util.concurrent.Callable;

public class LambdaInitialization {
public static void main(String args[]) throws Exception{
Callable[] animals = new Callable[]{()->"Lion", ()->"Crocodile"};

System.out.println(animals[0].call());
}
}


[b][size=x-large]5、Lambda 表达式进行排序[/size][/b]

这个例子的关键是将方法的引用传递给了另一个方法来进行调用。Comparator 接口的具体实现作为参数传递给了 Arrays.sort 方法。

import java.util.Arrays;

public class LambdaExpressionSort {
public static void main (String[] ar){
Animal[] animalArr = {
new Animal("Lion"),
new Animal("Crocodile"),
new Animal("Tiger"),
new Animal("Elephant")};

System.out.println("Before Sort: "+Arrays.toString(animalArr));
Arrays.sort(animalArr, Animal::animalCompare);
System.out.println("After Sort: "+Arrays.toString(animalArr));
}
}

class Animal {
String name;

Animal(String name) {
this.name = name;
}

public static int animalCompare(Animal a1, Animal a2) {
return a1.name.compareTo(a2.name);
}

public String toString() {
return name;
}
}


[b][size=x-large]6、条件判断(Predicates) 和 Lambda 表达式[/size][/b]

条件判断和 Lambda 之间结合的非常好。我们可以使用 Lambda 来实现 Predicate 接口,并且将其传递给具体的方法,作为方法的判断条件。

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class LambdaPredicate {

public static int add(List numList, Predicate predicate) {
int sum = 0;
for (int number : numList) {
if (predicate.test(number)) {
sum += number;
}
}
return sum;
}

public static void main(String args[]){

List numList = new ArrayList();

numList.add(new Integer(10));
numList.add(new Integer(20));
numList.add(new Integer(30));
numList.add(new Integer(40));
numList.add(new Integer(50));

System.out.println("Add Everything: "+add(numList, n -> true));
System.out.println("Add Nothing: "+add(numList, n -> false));
System.out.println("Add Less Than 25: "+add(numList, n -> n < 25));
System.out.println("Add 3 Multiples: "+add(numList, n -> n % 3 == 0));
}
}


文章来源:[url]http://www.aptusource.org/2014/03/java-8-lambda-example/[/url]
内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向与逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划与B样条优化技术,提升机械臂运动轨迹的合理性与平滑性。文中还涉及多种先进算法与仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模与求解,展示了Matlab在机器人控制、智能算法与系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学与动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划与轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合与智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模与神经网络控制的设计流程,关注算法实现细节与仿真结果分析,同时参考文中提及的多种优化与估计方法拓展研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值