英语原文地址:https://www.javaguides.net/2020/03/java-lambda-expressions-examples.html
作者:Ramesh Fadatare
翻译:高行行
在本教程中,我们将看到Java中约11个有用的Lambda表达式示例。
Java 8 Lambda表达式语法
Java Lambda表达式语法
(argument-list) -> {body}
Java lambda表达式包含三个组件。
- 参数列表:也可以为空或非空。
- 箭头标记:用于链接参数列表和表达式主体。
- 正文:包含lambda表达式的表达式和语句。
Java Lambda表达式示例
1. Java简单Lambda表达式示例
在这里,我们使用lambda表达式实现Drawable功能接口方法:
interface Drawable{public void draw();}public class LambdaExpressionExample {public static void main(String[] args) {int width=10;//with lambdaDrawable withLambda=()->{System.out.println("Drawing "+width);};withLambda.draw();}}
输出:
Drawing 10
2. Java Lambda表达式示例:无参数
请参考代码中的注释,该注释指示具有Lambda表达式和不具有Lambda表达式的代码。
interface Sayable {public String say();}public class JLEExampleNoParameter {public static void main(String[] args) {// without lambda expressionSayable sayable = new Sayable() {@Overridepublic String say() {return "Return something ..";}};sayable.say();// with lambda expressionSayable withLambda = () -> {return "Return something ..";};withLambda.say();}}
3. Java Lambda表达式示例:单参数
请参考代码中的注释,该注释指示具有Lambda表达式和不具有Lambda表达式的代码。
interface Printable {void print(String msg);}public class JLEExampleSingleParameter {public static void main(String[] args) {// without lambda expressionPrintable printable = new Printable() {@Overridepublic void print(String msg) {System.out.println(msg);}};printable.print(" Print message to console....");// with lambda expressionPrintable withLambda = (msg) -> System.out.println(msg);withLambda.print(" Print message to console....");}}
输出:
Print message to console....Print message to console....
4. Java Lambda表达式示例:多个参数
请参考代码中的注释,该注释指示具有Lambda表达式和不具有Lambda表达式的代码。
interface Addable{int add(int a,int b);}public class JLEExampleMultipleParameters {public static void main(String[] args) {// without lambda expressionAddable addable = new Addable() {@Overridepublic int add(int a, int b) {return a + b;}};addable.add(10, 20);// with lambda expression// Multiple parameters in lambda expressionAddable withLambda = (a,b)->(a+b);System.out.println(withLambda.add(10,20));// Multiple parameters with data type in lambda expressionAddable withLambdaD = (int a,int b) -> (a+b);System.out.println(withLambdaD.add(100,200));}}
5. Java Lambda表达式示例:多个语句
interface IAvarage{double avg(int[] array);}public class JLEExampleMultipleStatements {public static void main(String[] args) {// without lambda expression, IAvarage implementation using anonymous classIAvarage avarage = new IAvarage() {@Overridepublic double avg(int[] array) {double sum = 0;int arraySize = array.length;System.out.println("arraySize : " + arraySize);for (int i = 0; i < array.length; i++) {sum = sum + array[i];}System.out.println("sum : " + sum);return (sum/ arraySize);}};int[] array = {1,4,6,8,9};System.out.println(avarage.avg(array));// with a lambda expression// You can pass multiple statements in lambda expressionIAvarage withLambda = (withLambdaArray) -> {double sum = 0;int arraySize = withLambdaArray.length;System.out.println("arraySize : " + arraySize);for (int i = 0; i < withLambdaArray.length; i++) {sum = sum + withLambdaArray[i];}System.out.println("sum : " + sum);return (sum/ arraySize);};int[] withLambdaArray = {1,4,6,8,9};System.out.println(withLambda.avg(withLambdaArray));}}
6. Java Lambda表达式示例:创建线程
public class JLEExampleRunnable {public static void main(String[] args) {//without lambda, Runnable implementation using anonymous classRunnable runnable = new Runnable() {@Overridepublic void run() {System.out.println(" Runnable example without lambda exp.");}};Thread thread = new Thread(runnable);thread.start();//with lambdaRunnable withLambda = () -> System.out.println(" Runnable example with lambda exp.");Thread thread1 = new Thread(withLambda);thread1.start();}}
输出:
Runnable example without lambda exp.Runnable example with lambda exp.
7. Java Lambda表达式示例:比较器
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class JLEComparatorExample {public static void main(String[] args) {List<Person> listOfPerson = new ArrayList<Person>();listOfPerson.add(new Person("abc", 27));listOfPerson.add(new Person("mno", 26));listOfPerson.add(new Person("pqr", 28));listOfPerson.add(new Person("xyz", 27));// Without lambda expression.// Sort list by ageComparator<Person> comparator = new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {return o1.getAge() - o2.getAge();}};Collections.sort(listOfPerson, comparator);System.out.println(" sort persons by age in ascending order");for (Person person : listOfPerson) {System.out.println(" Person name : " + person.getName());}// Witht lambda expression.// Sort list by ageCollections.sort(listOfPerson, (Person o1, Person o2) -> {return o1.getAge() - o2.getAge();});// Use forEach method added in java 8System.out.println(" sort persons by age in ascending order");listOfPerson.forEach((person) -> System.out.println(" Person name : " + person.getName()));}}class Person {private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
8. Java Lambda表达式示例:事件监听器
import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextField;public class LambdaEventListenerExample {public static void main(String[] args) {JTextField tf=new JTextField();tf.setBounds(50, 50,150,20);JButton b=new JButton("click");b.setBounds(80,100,70,30);// lambda expression implementing here.b.addActionListener(e-> {tf.setText("hello swing");});JFrame f=new JFrame();f.add(tf);f.add(b);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLayout(null);f.setSize(300, 200);f.setVisible(true);}}
9.使用forEach()方法和Lambda表达式示例迭代ArrayList
package net.javaguides.collections;import java.util.Arrays;import java.util.Iterator;import java.util.List;/**** Java program to demonstrate different ways to Iterate over an ArrayList in Java* @author Ramesh Fadatare**/public class DifferentWaysListIterateProgram {public static void main(String...args) {List < String > courses = Arrays.asList("C", "C++", "Core Java", "J2EE", "Spring", "Hibernate", "Python");// JDK 8 streaming example lambda expressioncourses.stream().forEach(course - > printCourse(course));// JDK 8 streaming example method referencecourses.stream().forEach(DifferentWaysListIterateProgram::printCourse);// JDK 8 for each with lambdacourses.forEach(course - > printCourse(course));// JDK 8 for eachcourses.forEach(DifferentWaysListIterateProgram::printCourse);}// common method to print courseprivate static void printCourse(String course) {System.out.println("course name :: " + course);}}
10.使用forEach()方法和Lambda表达式示例迭代HashSet
package net.javaguides.collections;import java.util.HashSet;import java.util.Iterator;import java.util.Set;/*** Java program to demonstrate different ways to iterate over a Set in Java** @author Ramesh Fadatare**/public class DifferentWaysSetIterateProgram {public static void main(String...args) {Set < String > courses = new HashSet < String > ();courses.add("Java");courses.add("C");courses.add("C++");courses.add("Python");courses.add("Scala");// JDK 8 streaming example lambda expressioncourses.stream().forEach(course - > coursePrinter(course));// JDK 8 streaming example method referencecourses.stream().forEach(DifferentWaysSetIterateProgram::coursePrinter);// JDK 8 for each with lambdacourses.forEach(course - > coursePrinter(course));// JDK 8 for eachcourses.forEach(DifferentWaysSetIterateProgram::coursePrinter);}// common method to print courseprivate static void coursePrinter(String course) {System.out.println("course name :: " + course);}}
11.使用forEach()方法和Lambda表达式示例迭代HashMap
package net.javaguides.collections;import java.util.HashMap;import java.util.Iterator;import java.util.Map;/*** This program demonstrate different ways to iterate over a Map in Java** @author Ramesh Fadatare**/public class DifferentWaysMapIterateProgram {public static void main(String...args) {Map < Integer, String > coursesMap = new HashMap < Integer, String > ();coursesMap.put(1, "C");coursesMap.put(2, "C++");coursesMap.put(3, "Java");coursesMap.put(4, "J2EE");coursesMap.put(5, "Python");coursesMap.put(6, "Scala");// JDK 8 for each with lambdacoursesMap.forEach((k, v) - > coursePrinter(k, v));// JDK 8 for each method referencecoursesMap.forEach(DifferentWaysMapIterateProgram::coursePrinter);}// common method to print map key valueprivate static void coursePrinter(Integer number, String brand) {System.out.println("course no : " + number + " and course name : " + brand);}}
