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

[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/
分享到:
评论

相关推荐

    java8 lambda表达式学习总结

    1. **类型推断**:Java 8 可以自动推断Lambda表达式的参数类型,因此在许多情况下,我们无需显式声明类型。 2. **捕获外部变量**:Lambda 表达式可以访问和修改其定义范围内的 final 或基本类型的局部变量。 3. **...

    JavaLambda表达式和匿名类.pdf

    Java 8 引入了Lambda表达式,这是对传统编程方式的一大革新,它极大地简化了函数式编程,尤其是在处理集合和并发操作时。Lambda表达式是Java 8中的一种语法糖,它允许开发者以更简洁的方式定义无状态、无副作用的...

    Java8的Lambda表达式

    Java 8引入了Lambda表达式,这是一种简洁的编写代码的方式,可以将代码块作为参数传递给方法,或者作为赋值给变量的对象。Lambda表达式为Java增加了函数式编程的能力,使代码更加简洁和灵活。在Java 8中,Lambda...

    Java lambda表达式和JVM字节码功能详解.pdf

    Java Lambda表达式是Java 8引入的一个重要特性,它极大地简化了函数式编程风格的实现。Lambda表达式允许我们将函数作为一个值传递,就像传递其他数据类型一样。这在处理集合、事件驱动编程以及多线程等场景下尤其...

    Java8新特性之Lambda表达式和Optional类

    函数式接口可以被 Lambda 表达式实例化,允许开发者使用 Lambda 表达式编写更简洁的代码。 1.2 函数式接口- Consumer/Predicate/Function/Supplier 函数式接口有四种类型:Consumer、Predicate、Function 和 ...

    Java 1.8 lambda表达式示例源码

    Lambda表达式是Java 8对函数式接口支持的核心组成部分,它允许我们将代码块视为一种值,可以作为参数传递,也可以作为方法返回。 首先,我们需要理解什么是函数式接口。函数式接口是指只有一个抽象方法的接口,这样...

    精通lambda表达式: java多核编程

    Lambda表达式是Java 8引入的关键特性之一,它极大地简化了函数式编程,使得Java开发者能够更有效地处理并发问题,从而更好地利用现代计算机的多核处理器资源。 Lambda表达式的核心概念在于它的简洁性和可传递性。它...

    委托、事件、Lambda表达式Demo

    例如,上面的`MyDelegate`可以用Lambda表达式来创建实例: ```csharp MyDelegate lambdaDel = (x, y) =&gt; x + y; // Lambda表达式作为委托实例 ``` Lambda表达式与委托结合使用,使得代码更加简洁,尤其在LINQ查询...

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

    Java8 新特性Lambda表达式实例详解 Java8 中引入了Lambda表达式,这是一种函数式编程的方式,它可以使代码变得更加简洁和高效。Lambda表达式可以作为函数式接口的实例,它可以捕获外部变量,实现高效的回调机制。 ...

    jdk1.8 Lambda表达式

    Lambda 表达式实例: ```java // 无参数,直接返回5 ()-&gt;5 // 接收一个参数,并返回其两倍值 x-&gt;2*x // 接收两个参数,并返回它们的差值 (x,y)-&gt;x-y // 接收两个整数参数,返回它们的和 (int x, int y)-&gt;x+y // ...

    Lambda表达式的例子

    Lambda表达式是Java 8引入的一种新的编程特性,它极大地简化了函数式编程,并使得代码更加简洁、易读。在Java中,Lambda表达式可以被理解为匿名函数,即没有名字的函数,它可以被当作方法参数传递,或者作为类的成员...

    Java8 Lambda表达式详解及实例

    Lambda表达式使得Java 8能够更好地支持函数式编程,让代码更简洁、可读性更强,尤其在处理集合、并发以及事件驱动编程时显得尤为重要。通过结合函数接口,Lambda表达式可以方便地应用于方法引用、流API等高级特性中...

    Java8集合 CompletableFuture lambda表达式 新的TimeAPI 和ForkJoin Demo包

    在这个"Java8集合 CompletableFuture lambda表达式 新的TimeAPI 和ForkJoin Demo包"中,我们可以深入探讨以下几个关键知识点: 1. **Lambda表达式**: Lambda表达式是Java 8的一大亮点,它简化了对匿名函数的处理...

    Lambda表达式测试demo

    Lambda表达式是Java 8引入的一种新特性,它极大地简化了函数式编程,使得代码更加简洁、易读。Lambda表达式本质上是匿名函数,可以理解为没有名字的函数,但功能与普通方法相同,能够被赋值给变量,也可以作为参数...

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

    "Java 8 lambda表达式引入详解及实例" Java 8 中引入的 lambda 表达式是一种新的编程方式,能够简化代码、提高开发效率。下面将对 lambda 表达式的引入、基本概念、使用方法和实例进行详细的介绍。 lambda 表达式...

    lambda表达式学习demo

    Lambda 表达式是 Java 8 引入的一项重要特性,它允许我们以简洁的方式定义匿名函数。...熟练掌握Lambda表达式对于提升Java编程能力至关重要。通过实践和理解其工作原理,开发者可以更好地利用这一强大的工具。

    Java Lambda表达式.docx

    Java Lambda表达式是Java 8引入的一个重要特性,它极大地简化了函数式编程,并使得代码更加简洁、易读。在传统的面向对象编程中,我们通常通过创建对象并调用其方法来解决问题。而函数式编程则更注重结果,不关心...

    java 8 lambda- expressions 学习资料,例子。练习 java example

    Java 8是Java语言的一个重大版本更新,它引入了lambda表达式,这是Java平台的核心特性之一。Lambda表达式为Java带来了函数式编程的元素,使得开发者可以以更简洁的方式编写代码,尤其是在集合和多线程方面。本资料...

    Java的lambda表达式实现解析

    Java的lambda表达式实现解析是Java 8中引入的一项新功能,为开发者提供了更加简洁和灵活的编程方式。lambda表达式可以理解为匿名函数,可以实现在代码中编写小段的函数式代码,从而提高代码的可读性和可维护性。 在...

Global site tag (gtag.js) - Google Analytics