`
cucaracha
  • 浏览: 137200 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A8f3fa2f-18ce-3862-897a-5d2209197c90
Java NIO.2
浏览量:85540
7a076ba7-8ec8-3241-aa3c-67bb2f7856a2
Java EE 7 简明教...
浏览量:35532
社区版块
存档分类
最新评论

[Java 8] Lambda 表达式实例

阅读更多
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/
分享到:
评论

相关推荐

    Java 8 lambda表达式

    java lambda表达式,lambda 表达式基本上表达了函数式接口的实例(具有单一抽象方法的接口称为函数式接口。一个例子是 java.lang.Runnable)。lambda 表达式实现了唯一的抽象函数,因此实现了函数式接口 lambda ...

    Java8 Lambda表达式详解及实例

    主要介绍了Java8 Lambda表达式详解的相关资料,需要的朋友可以参考下

    Java8 新特性Lambda表达式实例详解

    主要介绍了Java8 新特性Lambda表达式实例详解的相关资料,需要的朋友可以参考下

    Java 8 lambda表达式引入详解及实例

    主要介绍了Java 8 lambda表达式引入详解及实例的相关资料,需要的朋友可以参考下

    Java Lambda表达式和函数式接口实例分析

    主要介绍了Java Lambda表达式和函数式接口,结合实例形式分析了Java8 Lambda表达式和函数式接口相关原理、用法及操作注意事项,需要的朋友可以参考下

    Android 中Lambda表达式的使用实例详解

    Android 中Lambda表达式的使用实例详解 Java8 中着实引入了一些...如果想要在 Android 项目中使用 Lambda表达式 或者 Java8 的其他新特性,首先我们需要安装Java8版本的JDK,然后在 app/build.gradle 中添加以下配置:

    Java Lambda表达式详解和实例

    主要介绍了Java Lambda表达式详细介绍,从简单的到复杂的实例讲解,需要的朋友可以参考下

    Java8新特性lambda表达式有什么用(用法实例)

    主要介绍了Java8新特性lambda表达式有什么用,着重以实例讲解lambda表达式,需要的朋友可以参考下

    Java Lambda表达式与匿名内部类的联系和区别实例分析

    主要介绍了Java Lambda表达式与匿名内部类的联系和区别,结合实例形式分析了Java Lambda表达式与匿名内部类功能、用法、区别及操作注意事项,需要的朋友可以参考下

    Java Lambda表达式入门示例

    主要介绍了Java Lambda表达式,结合简单实例形式分析了Lambda表达式功能、原理、用法及相关操作注意事项,需要的朋友可以参考下

    lambda-notes:Lambda 表达式学习笔记

    Java 8 Lambda表达式学习笔记,摘自书籍 ,笔记内只举了实例,没有进行过多的解释与剖析,可以通过IDE进入Java 8 的相关源码进行查看理解,查看主要知识储备包括: 接口定义 Java 8 default关键字 泛型 匿名内部类 ...

    Java Lambda表达式的方法引用和构造器引用实例分析

    主要介绍了Java Lambda表达式的方法引用和构造器引用,结合实例形式分析了Lambda表达式的方法引用和构造器引用相关原理、用法及操作注意事项,需要的朋友可以参考下

    Java lambda.

    JAVA新特性Lambda的演示,让你通过实例,短时间内搞清什么是Lambda表达式及其用法。

    Java 特性: Lambda 表达式(第 1 季)

    Lambda 表达式是 java 8 的新特性,本质是一个函数式接口( functional interface )的实现类的实例,Lambda 表达式从匿名类发展而来。函数式接口只有一个抽象方法,为了实现这个抽象方法,我们要为之创建匿名实现类...

    Lambda表达式最佳实践

    文章目录简介优先使用标准Functional接口使用@FunctionalInterface注解在...Lambda表达式java 8引入的函数式编程框架。之前的文章中我们也讲过Lambda表达式的基本用法。 本文将会在之前的文章基础上更加详细的讲

    死磕Lambda表达式(四):常用的函数式接口

    在Java8支持Lambda表达式以后,为了满足Lambda表达式的一些典型使用场景,JDK为我们提供了大量常用的函数式接口。它们主要在 java.util.function 包中,下面简单介绍几个其中的接口及其使用示例。 Supplier接口 ...

    死磕Lambda表达式(五):Comparator复合

    在之前文章的例子中,我们使用Comparator.comparing静态方法构建了一个Comparator接口的实例,我们再来简单介绍一下。先来看一下Mask类是怎么写的: package one.more.study; /** * 口罩 * @author 万猫学社 */ ...

    java 经典实例第三版

    从lambda表达式、JavaFX 8,到网络编程和支持移动设备等方面,Java 8都有许多更新。本书包含了数百个经过实践验证的技巧,内容涵盖了广泛的Java主题,可帮助你快速进入编程状态。你可以从中学到一切有用的技术,包括...

    Whats_New_In_Java8

    答案:lambda表达式是一个没有标识的对象=&gt;参见示例RunnubleLambda.java或ComparatorLambda.java =&gt;一个Lambda表达式是在不使用new的情况下创建的。 编写lambda表达式的几种方法 最简单的方法 FileFilter lambda...

Global site tag (gtag.js) - Google Analytics