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语句 */ Listlist = 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 Listmap(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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月10日 11时40分17秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
hdu 5450 Traversal(状压dp)
2019-04-30
Gym - 101334E Exploring Pyramids(dp+分治)
2019-04-30
uva 10934 Dropping water balloons(dp)
2019-04-30
hdu 6183 Color it(cdq分治+线段树)
2019-04-30
gym 101137 L Lazy Coordinator(概率)
2019-04-30
Mysql 入门
2019-04-30
Vue 之 axios 篇
2019-04-30
vue 之动画
2019-04-30
js的基础语法
2019-04-30
vue使用iconfont
2019-04-30
linux 查看文件夹权限
2019-04-30
linux tar 备份
2019-04-30
ubuntu中配置任意应用的快捷键
2019-04-30
ln 命令 硬链接
2019-04-30
使用鼠标中键在vim下赋值文本到其它编辑器
2019-04-30
chkconfig使用和级别介绍
2019-04-30
snort 笔记1 ----- 3种模式简介
2019-04-30
ubuntu 快捷键
2019-04-30
linux 根目录下文件夹分析
2019-04-30