lambda表达式用法
Lambda表达式用法
Lambda表达式是Java 8和其后版本引入的一个新特性。Lambda表达式允许程序员以更简单和更方便的方式定义函数接口。它是一个Java中的匿名函数,它没有名称、返回类型或修饰符。这些表达式的主要目的是为了作为函数式接口的实例。在Java中,函数式接口是指只有一个抽象方法的接口。
以下是一个基本的Lambda表达式语法:
(parameterList)->{expression}lambda编程
例如,下面是一个简单的Lambda表达式程序:
public class Lambda { public static void main(String args[]) { MyFunc myFunc = (n) -> n * n; System.out.println(myFunc.func(4)); } }
interface MyFunc { int func(int x); }
程序的输出是16,因为它计算了输入参数的平方值。
在这个例子中,我们定义了一个函数式接口 MyFunc, 该接口只有一个方法func()。然后,我们定义了一个Lambda表达式来实现这个方法。Lambda表达式的输入(一个整数)乘以自己,并返回结果。
台式机编程师常常要处理复杂的问题,其主要问题之一是处理数据,Lambda表达式为数据处理提供了一个新的解决方案。以下是Lambda表达式的一些常用用法:
过滤器(Filtering)
过滤器用于从集合中过滤出特定数据。在Java中,我们可以通过使用for循环和条件来实现这一点。但是,Lambda表达式使这个任务变得更加简单和直观。
下面是一个简单的程序,它使用Lambda表达式在集合中过滤出所有大于50的数字,并将它们存储在另一个集合中:
import java.util.ArrayList; import java.util.List;
public class Lambda { public static void main(String args[]) { List<Integer> list1 = new ArrayList<Integer>(); list1.add(10); list1.add(20); list1.add(30); list1.add(40); list1.add(50); list1.add(60); list1.add(70); List<Integer> list2 = filter(list1, (n) -> n > 50); System.out.println(list2); }
public static List<Integer> filter(List<Integer> list, Predicate<Integer> predicate) { List<Integer> result = new ArrayList<Integer>(); for (Integer integer : list) { if (st(integer)) { result.add(integer); } } return result; } }
程序的输出是[60, 70],因为它过滤掉了50以下的数字,并将它们存储在一个新的列表(list2)中。
在这个例子中,我们使用了Java 8中的Predicate<T>接口来实现过滤器。Predicate接口是一个函数式接口,它只有一个抽象方法test(T t)。test方法返回真或假,用于指示输入的对象是否符合要求。
在filter方法中,我们遍历列表中的每个元素,并将谓词应用于该元素。如果谓词返回true,则我们将该元素添加到结果列表中。
映射(Mapping)
映射是一个函数,将输入元素映射到输出元素。在Java中,我们经常使用for循环和if语句来实现这种映射。但是,Lambda表达式使这个任务变得更加优雅和灵活。
下面是一个简单的程序,它使用Lambda表达式将字符串列表中的每个元素转换为大写形式,并将它们存储在一个新的列表中:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;
public class Lambda { public static void main(String args[]) { List<String> list1 = Arrays.asList("Java", "Python", "Ruby"); List<String> list2 = list1.stream().map(s -> s.toUpperCase()).List()); System.out.println(list2); } }
程序的输出是[JAVA, PYTHON, RUBY],因为它将输入列表中的每个字符串转换为大写形式,并将它们存储在新的列表中。
在这个例子中,我们使用了Java 8中的Stream API来实现映射。map()方法映射所有输入元素,可以使用Lambda表达式指定要应用的操作。
聚合(Reduction)
聚合是指将一系列值合并为一个值的过程。在Java中,我们经常使用for循环和if语句来计算累加器的总和。但是,Lambda表达式使这个任务更加容易和清晰。
下面是一个简单的程序,它使用Lambda表达式计算列表中所有元素的和:
import java.util.Arrays; import java.util.List;
public class Lambda { public static void main(String args[]) { List<Integer> list = Arrays.asList(10, 20, 30, 40, 50); int sum = list.stream().reduce(0, (a, b) -> a + b); System.out.println(sum); } }
程序的输出是150,因为它将输入列表中的每个值累加起来,并输出其总和。
在这个例子中,我们使用了Java 8中的Stream API来实现聚合。reduce()方法将输入元素
聚合为一个值,可以使用Lambda表达式指定要应用的操作。
总结
Lambda表达式是Java 8以及之后版本中引入的一个新特性。Lambda表达式的主要目的是为了作为函数式接口的实例,以提供更简单和更方便的方式定义函数接口。Lambda表达式在程序员处理复杂数据时提供了新的解决方案,其中包括过滤器、映射和聚合的用法。Lambda表达式已经成为现代Java编程中的常见程序技术。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论