栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中的BiFunction

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的BiFunction

Java中的BiFunction
  • 介绍
  • addThen(after)
    • 通俗解释
  • BiFunction + 构造函数

介绍

BiFunction是一个函数式接口,表示一个接受两个输入值并返回一个输入值的运算符

@FunctionalInterface
public interface BiFunction {

    
    R apply(T t, U u);

    
    default  BiFunction andThen(Function after) {
        Objects.requireNonNull(after);
        return (T t, U u) -> after.apply(apply(t, u));
    }
}
package cn.caigen.bifunctiontutorial;

import java.util.function.BiFunction;

public class BiFunctionEx1 {
    public static void main(String[] args) {
        BiFunction biFunction = (firstName, lastName) -> firstName + " " + lastName;

        String fullName = biFunction.apply("Bill","John");
        System.out.println(fullName);
    }
}
//Map中的值进行修改
package cn.caigen.bifunctiontutorial;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;

public class BiFunctionEx2 {
    public static void main(String[] args) {
        BiFunction biFunction = BiFunctionEx2::getNewPrice;

        Map localSalary = new HashMap<>();
        localSalary.put("hefei", 100);
        localSalary.put("nanjing", 20);
        localSalary.put("shanghai", 60);

        System.out.println("Origin salary: " + localSalary);
        localSalary.replaceAll(biFunction);
        System.out.println("After salary: " + localSalary);

    }

    public static int getNewPrice(String name, int salary) {
        if (name.equals("hefei")) {
            return salary * 10;
        }
        return salary;
    }
}

addThen(after)

addThen(after)方法首先返回一个组合的BiFunction。首先,调用BiFunction.apply将(T,U)转换成R。然后调用after.apply()将R变成V。若在此过程有一个发生错误,则将错误传给调用者。

通俗解释
@FunctionalInterface
public interface BiFunction {
    // (T,U) -> R
    R apply(T t, U u);

    // (T,U) -> V
    default  BiFunction andThen(Function after) {
        Objects.requireNonNull(after);
        
        BiFunction ret = (T t, U u) -> {
            // (T,U) -> R
            R r = this.apply(t, u);    
            
            // R -> V
            V v = after.apply(r);
            return v;
        };
        return ret;
    }
}
// 示例
package cn.caigen.bifunctiontutorial;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Function;

public class BiFunction_addThen_Ex3 {
    public static void main(String[] args) {
        BiFunction biFunction =
                (local, salary) -> local + " 11";
        Function biFunction1 =
                (local) -> local.toUpperCase();

        Map localSalary = new HashMap<>();

        localSalary.put("beijing", 1000);
        localSalary.put("shanghai", 200);
        localSalary.put("tokyo", 50);
        
        System.out.println(localSalary);

        String result  = biFunction.andThen(biFunction1).apply("Bill", 123);
        System.out.println(result);
    }
}
BiFunction + 构造函数

通过className::new调用,返回对象。

package cn.caigen.bifunctiontutorial;

import java.util.function.BiFunction;

public class BiFunctionEx4 {
    public static void main(String[] args) {
        BiFunction biFunction = Staff::new;

        Staff tom = biFunction.apply("Tom", 1000);
        Staff bill = biFunction.apply("Bill", 2000);

        tom.showInfo();
        bill.showInfo();
    }
    public static class Staff {
        private String fullName;
        private int salary;

        public  Staff(String fullName, int salary) {
            this.fullName = fullName;
            this.salary = salary;
        }

        public String getFullName() {
            return fullName;
        }

        public void setFullName(String fullName) {
            this.fullName = fullName;
        }

        public int getSalary() {
            return salary;
        }

        public void setSalary(int salary) {
            this.salary = salary;
        }

        public void showInfo(){
            System.out.println("fullName: " + this.getFullName() + " Salary: " + this.getSalary());
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号