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
相关推荐
心之语歌2 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊3 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang3 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang4 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解4 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
阿白的白日梦8 小时前
winget基础管理---更新/修改源为国内源
windows
SimonKing9 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean9 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven9710 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55119 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java