写点什么

Java lambda 表达式用法介绍,linux 教程第四版思考题答案

用户头像
极客good
关注
发布于: 刚刚

输出:


Value of Pi = 3.1415


在上面的例子中,


我们已经创建了一个名为MyInterface的功能接口。它包含一个名为getPiValue()的抽象方法


在主类中,我们声明了对MyInterface的引用。注意,我们可以声明接口的引用,但不能实例化接口。就是,


// it will throw an error


MyInterface ref = new myInterface();


// it is valid


MyInterface ref;


然后,我们为引用指定了一个 lambda 表达式。


ref = () -> 3.1415;


最后,我们使用引用接口调用方法getPiValue()


System.out.println("Value of Pi = " + ref.getPiValue());


[](


)带参数的 Lambda 表达式




到目前为止,我们已经创建了没有任何参数的 lambda 表达式。但是,与方法类似,lambda 表达式也可以有参数。例如[《求职面试笔试宝典》](


)


(n) -> (n%2)==0


这里,括号内的变量 n 是传递给 lambda 表达式的参数。lambda 主体接受参数并检查它是偶数还是奇数。


示例 4:使用带参数的 lambda 表达式


@FunctionalInterface


interface MyInterface {


// abstract method


String reverse(String n);


}


public class Main {


public static void main( String[] args ) {


// declare a reference to MyInterface


// assign a lambda expression to the reference


MyInterface ref = (str) -> {


String result = "";


for (int i = str.length()-1; i >= 0 ; i--)


result += str.charAt(i);


return result;


};


// call the method of the interface


System.out.println("Lambda reversed = " + ref.reverse("Lambda"));


}


}


输出:


Lambda reversed = adbmaL


##通用功能接口


到目前为止,我们使用的函数接口只接受一种类型的值。例如


@FunctionalInterface


interface MyInterface {


String reverseString(String n);


}


上面的函数接口只接受字符串并返回字符串。但是,我们可以使函数接口通用,以便接受任何数据类型。如果您不确定泛型,请访问 Java 泛型。


示例 5:通用函数接口和 Lambda 表达式


// GenericInterface.java


@FunctionalInterface


interface GenericInterface<T> {


// generic method


T func(T t);


}


// GenericLambda.java


public class Main {


public static void main( String[] args ) {


// declare a reference to GenericInterface


// the GenericInterface operates on String data


// assign a lambda expression to it


GenericInterface<String> reverse = (str) -> {


String result = "";


for (int i = str.length()-1; i >= 0 ; i--)


result += str.charAt(i);


return result;


};


System.out.println("Lambda reversed = " + reverse.func("Lambda"));


// declare another reference to GenericInterface


// the GenericInterface operates on Integer data


// assign a lambda expression to it


GenericInterface<Integer> factorial = (n) -> {


int result = 1;


for (int i = 1; i <= n; i++)


result = i * result;


return result;


};


System.out.println("factorial of 5 = " + factorial.func(5));


}


}


输出:


Lambda reversed = adbmaL


factorial of 5 = 120


在上面的示例中,我们创建了一个名为GenericInterface的通用函数接口。它包含一个名为func()的泛型方法。


在这里,在主类中,


  • GenericInterface<String>reverse-创建对接口的引用。该接口现在对字符串类型的数据进行操作。

  • GenericInterface<Integer>factorial-创建对接口的引用。在本例中,接口对整型数据进行操作。


[](


)Lambda 表达式和 StreamAPI




新的java.util.stream包已添加到 JDK8 中,它允许 java 开发人员执行搜索、筛选、映射、减少或操作列表等集合。


例如,我们有一个数据流(在本例中是一个字符串列表),其中每个字符串都是国家名称和国家地点的组合。现在,我们可以处理这些数据流,只从尼泊尔检索地方。


为此,我们可以通过 stream API 和 Lambda 表达式的组合在 stream 中执行批量操作。


示例 6:演示将 lambdas 与 stream API 一起使用


import java.util.ArrayList;


import java.util.List;


public class StreamMain {


// create an object of list using ArrayList


static List<String> places = new ArrayList<>();


// preparing our data


public static List getPlaces(){


// add places and country to the list


places.add("Nepal, Kathmandu");


places.add("Nepal, Pokhara");


places.add("India, Delhi");


places.add("USA, New York");


places.add("Africa, Nigeria");


return places;


}


public static void main( String[] args ) {


List<String> myPlaces = getPlaces();


System.out.println("Places from Nepal:");


// Filter places from Nepal


myPlaces.stream()


.filter((p) -> p.startsWith("Nepal"))


.map((p) -> p.toUpperCase())


.sorted()


.forEach((p) -> System.out.println(p));


}


}


输出:


Places from


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


Nepal:


NEPAL, KATHMANDU


NEPAL, POKHARA


在上面的示例中,请注意以下语句:


myPlaces.stream()


.filter((p) -> p.startsWith("Nepal"))


.map((p) -> p.toUpperCase())


.sorted()


.forEach((p) -> System.out.println(p));


这里,我们使用流API的filter()map()forEach()等方法。这些方法可以将 lambda 表达式作为输入。


我们还可以根据上面学习的语法定义自己的表达式。这使我们能够像上面的示例中所看到的那样,大幅减少代码行。[《求职面试笔试宝典》](


)



用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Java lambda表达式用法介绍,linux教程第四版思考题答案