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
相关推荐
工业互联网专业7 分钟前
基于springboot+vue的动漫交流与推荐平台
java·vue.js·spring boot·毕业设计·源码·课程设计·动漫交流与推荐平台
雷渊10 分钟前
深入分析Spring的事务隔离级别及实现原理
java·后端·面试
try again!13 分钟前
rollup.js 和 webpack
开发语言·javascript·webpack
rebel22 分钟前
Java获取excel附件并解析解决方案
java·后端
du fei24 分钟前
C# 窗体应用(.FET Framework) 线程操作方法
开发语言·c#
du fei26 分钟前
C#文件操作
开发语言·c#
并不会33 分钟前
多线程案例-单例模式
java·学习·单例模式·单线程·多线程·重要知识
数据攻城小狮子34 分钟前
Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现
java·前端·spring boot·后端·maven·intellij-idea
m0_5557629035 分钟前
struct 中在c++ 和c中用法区别
java·c语言·c++
月亮有痕迹诶37 分钟前
【C++】智能指针
开发语言·c++·c++11