Quantcast
Channel: IT社区推荐资讯 - ITIndex.net
Viewing all articles
Browse latest Browse all 15843

[Java 8] Lambda 表达式实例

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

1、Lambda 表达式 Hello World

这是一个最简单的 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"));
  }
}


2、在 Lambda 表达式中访问局部变量和成员变量

在这个例子中演示了如何在 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();       
    }
}


3、Lambda 表达式中的方法传递

这个例子比前面的更高级一些。对与 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);
  }
}


4、Lambda 表达式的初始化

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());
  }
}


5、Lambda 表达式进行排序

这个例子的关键是将方法的引用传递给了另一个方法来进行调用。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;
  }
}


6、条件判断(Predicates) 和 Lambda 表达式

条件判断和 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));
  }
}


文章来源: http://www.aptusource.org/2014/03/java-8-lambda-example/

已有 0人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐




Viewing all articles
Browse latest Browse all 15843

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>