当前位置: 首页 > article >正文

java.util.function Function<T, R>

一、介绍

1、简介

Function<T, R> 是 Java 8 中的一个函数式接口,用于表示接受一个输入参数 T,并返回一个结果 R 的函数。Function接口中有一个抽象方法apply,用于定义函数的逻辑。Function接口通常用于将数据进行转换(处理逻辑由Lambda表达式实现)、映射或者执行某种转换操作。

2、常用的方法

R apply(T t):将此函数应用于给定的参数

default<V> Function andThen(Function after): 返回一个组合函数,首先将该函数应用于输入,然后将after函数应用于结果

二、用法

1、简单使用
import java.util.function.Function;

public class FunctionExample1 {
    public static void main(String[] args) {
        // 示例1:将字符串转换为对应的整数
        Function<String, Integer> strToInt = Integer::parseInt;
        int num = strToInt.apply("123");
        System.out.println(num); // 输出: 123

        // 示例2:将字符串转换为其长度
        Function<String, Integer> strLength = String::length;
        int length = strLength.apply("Hello World");
        System.out.println(length); // 输出: 11

        // 示例3:组合多个函数
        Function<String, Integer> strToIntAndMultiplyBy2 = strToInt.andThen(n -> n * 2);
        int result = strToIntAndMultiplyBy2.apply("5");
        System.out.println(result); // 输出: 10
    }
}
2、Function接口作为方法的参数

用于将函数作为参数传递

import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

public class FunctionExample2 {
    public static void main(String[] args) {
        // 示例1:将Function作为方法参数
        int result1 = calculate(5, num -> num * 2);
        System.out.println(result1); // 输出:10

        // 示例2:将Function作为方法返回值
        Function<Integer, Integer> multiplier = getMultiplier();
        int result2 = multiplier.apply(5);
        System.out.println(result2); // 输出:8

        // 示例3:使用Function接口作为方法参数或返回值
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        Function<Integer, String> intToString2 = (num) -> String.valueOf(num);

        processList(numbers, intToString2); // 将整数列表转换为字符串并打印出来
    }

    // 方法接受一个整数和一个Function作为参数,将整数应用到Function上并返回结果
    public static int calculate(int num, Function<Integer, Integer> operation) {
        return operation.apply(num);
    }

    // 方法返回一个Function,用于将整数加上固定值
    public static Function<Integer, Integer> getMultiplier() {
        int multiplierValue = 3;
        return num -> num + multiplierValue;
    }

    // 方法接受一个整数列表和一个将整数转换为字符串的函数作为参数
    // 它遍历整数列表,对每个整数应用传入的函数,将结果打印出来
    public static void processList(List<Integer> list, Function<Integer, String> processor) {
        for (Integer num : list) {
            String result = processor.apply(num);
            System.out.println(result);
        }
    }
}
3、Function接口作为方法的返回值

作为结果返回

public static Function<String, String> PING_PONG_INTERVAL = value -> {
        try {
            int number = Integer.parseInt(value);
            if (number <= 0) {
                throw new IllegalArgumentException("the value must be a number greater than 0.");
            }
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("the value must be a number.");
        }
        return value;
    };
 public  static  Function<String, String> RANGE_NUMBER(Range<Long> range) {
        return value -> {
            try {
                long number = Long.parseLong(value);
                if (!range.contains(number)) {
                    long lowerValue = range.lowerEndpoint();
                    long upperValue = range.upperEndpoint();
                    throw new NumberRangeException("the value must be a number range "+lowerValue+" to "+upperValue);
                }
            } catch (NumberFormatException e) {
                throw new NumberRangeException("the value must be a number.");
            }
            return value;
        };
    }
 public Function<String,UserDTO> getUserFunction = userId-> {
        UserDTO user= new UserDTO();
        user.setId(IDGenerator.getId());
        user.setUserId(userId);
        return user;
    };


http://www.kler.cn/news/342839.html

相关文章:

  • 机器学习中的多模态学习:用C/C++实现高效模型
  • 【SpringBoot详细教程】-11-SpringBoot整合Async 实现异步调用【持续更新】
  • 【Linux】多进程服务器模型(第十九篇)
  • Linux相关概念和易错知识点(14)(进程终止、进程退出、退出信息)
  • Patroni配置文件4-重要规则
  • Java中注解与反射的详细介绍
  • C# 结构体(Struct)
  • 0基础学习CSS(二十二)伪元素
  • 自动化的抖音
  • 算法:反转链表
  • Colorize: 0 variables Colorize is not activated for this file. VsCode
  • 【GeekBand】C++设计模式笔记7_Bridge_桥接模式
  • 惠普电脑怎么开启vt_惠普电脑开启vt虚拟化图文教程(支持新旧bios开启方法)
  • DNS 反向解析导致 ssh 连接缓慢
  • 实战交易策略 篇九:均线止盈策略
  • 计算机视觉之OpenCV vs YOLO
  • 什么是快充协议、支持多协议的USB Type-C受电端取电芯片
  • ARM base instruction -- movn
  • 基于SSM框架和Layui的学院课程安排系统的设计与实现(源码+定制+定制)
  • 【git】如何生成SSH key用于无需账号登录git仓库推送(需要令牌的问题)