java函数式编程

1,定义函数式接口

java 复制代码
package com.xingyuezhiyun.practice.lambada;

@FunctionalInterface
public interface PickerSelector<T extends Fruit> {

    boolean pick(T fruit);
}

2,提供处理函数并调用

java 复制代码
package com.xingyuezhiyun.practice.lambada;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {

public static void main(String [] args) {
        List<Fruit> fruitList = Arrays.asList(new Fruit("aaa", "red"){}, new Fruit("bbb", "blue"){});

        System.out.println(pickFruit(fruitList, new RedInstance()));
        System.out.println(pickFruit(fruitList, new BlueInstance()));
        System.out.println(pickFruit(fruitList, fruit -> fruit.getColor().equals("red")));

    }

public static List<Fruit> pickFruit(List<Fruit> fruitList, PickerSelector<Fruit> pickerSelector){
        List<Fruit> result = new ArrayList<>();
        fruitList.forEach(fruit -> {
            if (pickerSelector.pick(fruit)){
                result.add(fruit);
            }
        });
        
        return result;
    }
}

函数式接口 函数描述符

java 复制代码
Predicate<T>	  (T)  -> boolean
Consumer<T>	  (T)  -> void
Function< T, R >	  (T)  -> R
Supplier<T>	  ( )  -> T
UnaryOperator<T> 	  (T)  ->  T 
BinaryOperator<T>	  (T, T) -> T
BiPredicate<L, R>	  (L, R)  -> boolean
BiConsumer<T, U>	  (T, U)  -> void
BiFunction<T, U, R>	  (T, U)  -> R
相关推荐
_r0bin_18 分钟前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
zhang988000020 分钟前
JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
开发语言·javascript·vue.js
Abigail_chow1 小时前
EXCEL如何快速批量给两字姓名中间加空格
windows·microsoft·excel·学习方法·政务
硅的褶皱1 小时前
对比分析LinkedBlockingQueue和SynchronousQueue
java·并发编程
MoFe11 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
季鸢2 小时前
Java设计模式之观察者模式详解
java·观察者模式·设计模式
Fanxt_Ja2 小时前
【JVM】三色标记法原理
java·开发语言·jvm·算法
蓝婷儿2 小时前
6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
开发语言·python·学习
love530love2 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
Mr Aokey3 小时前
Spring MVC参数绑定终极手册:单&多参/对象/集合/JSON/文件上传精讲
java·后端·spring