Java - 函数式编程,Lambda 表达式
发布日期:2021-06-30 19:50:42 浏览次数:2 分类:技术文章

本文共 2413 字,大约阅读时间需要 8 分钟。

Lambda 表达式

public void expr1() {		/*		 * 在最简单的形式中,一个lambda可以由用逗号分隔的参数列表、–>符号与函数体三部分表示		 */		Arrays.asList("a", "b", "c").forEach(e -> System.out.println(e));		Arrays.asList(1, 2, 3).forEach((Integer e) -> {			e *= 2;			System.out.println(e);		});	}

Java标准库中的java.lang.Runnable和java.util.Comparator都是典型的函数式接口

Comparator 接口 - 函数式排序

public void expr2() {		/*		 * 1. Lambda可能会返回一个值		 * 2. 返回值的类型也是由编译器推测出来的		 * 3. 如果lambda的函数体只有一行的话,那么没有必要显式使用return语句		 */		List
list = Arrays.asList(5, 7, 2, 3); //Lambda表达式“(x, y) -> y - x”实现了java.util.Comparator接口// list.sort((e1, e2) -> e1.compareTo(e2)); // 升序 list.sort((e1, e2) -> e2.compareTo(e1)); // 降序 System.out.println(list); }

Runnable 接口

import org.junit.Test;public class ThreadUseLambda {	/*	 * 对于函数式接口:	 * 除了可以使用Java中标准的方法来创建实现对象之外,还可以使用lambda表达式来创建实现对象	 * 比如:	 * Java标准库中的java.lang.Runnable和java.util.Comparator都是典型的函数式接口	 */	public void sum(int a, int b) {		System.out.println(a+b);	}	@Test	public void runThreadUseLambda() {		// 线程1	    new Thread(() -> {	        sum(1, 3);	    }).start();	    // 线程2	    new Thread(() -> {	    	sum(2, 4);	    }).start();	}}

函数式接口Function

Java SE 8增加了 java.util.function 包,里面都是可以在开发中使用的函数式接口。开发人员也可以创建新的函数式接口。

package redis.practice;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.function.Function;public class CollectionUtils {	/*	 * map 函数:	 * 参数: input; processor -> Function -> T, 参数; R, 返回值	 */    public static  List
map(List
input, Function
processor) { ArrayList
result = new ArrayList
(); for (String obj : input) { // Function apply -> 执行函数业务逻辑 result.add(processor.apply(obj)); } return result; } public static void main(String[] args) { List
input = Arrays.asList(new String[] {"apple", "orange", "pear"}); List
lengths = CollectionUtils.map(input, (String v) -> String.valueOf(v.length())); List
uppercases = CollectionUtils.map(input, (String v) -> v.toUpperCase()); System.out.println(lengths); System.out.println(uppercases); }}

方法和构造方法引用

List input = Arrays.asList(new String[] {"apple", "orange", "pear"});input.forEach((v) -> System.out.println(v));input.forEach(System.out::println);
List dateValues = Arrays.asList(new Long[] {0L, 1000L});List dates = CollectionUtils.map(dateValues, Date::new);

转载地址:https://lipenglin.blog.csdn.net/article/details/72035945 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java - Redis Utils
下一篇:python - 利用Pandas对某app数据进行整理、分析并存入mongodb

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月10日 11时40分17秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章