当前位置: 首页 > 知识库问答 >
问题:

使用lambda表达式返回结果的Java方法引用

葛安和
2023-03-14

我试图学习在Java8中使用lambda表达式的方法引用,但遇到了一些我无法完全理解的东西。

public class Test {
    public static void main(String[] args) {
        int testValue = 23;
        handleSomething(true, testValue, () -> checkIfZero(testValue));
        handleSomething(false, testValue, () -> checkIfLargerThanZero(testValue));
    }

    private static boolean checkIfZero(int value) {
        if (value == 0)
            return true;
        return false;
    }

    private static boolean checkIfLargerThanZero(int value) {
        if (value > 0)
            return true;
        return false;
    }

    private static int handleSomething(boolean test, int value, Runnable function) {
        if (test) {
            System.out.println("Ignore");
            return;
        }

        if (function.run() == true)
            System.out.println("Passed");
        else
            System.out.println("Failed");
    }
}

使用lambda表达式(而不是创建接口等),是否有更干净的方法来完成此操作?

共有1个答案

姜凯风
2023-03-14

使用@Holger提出的BooleanSupplier是一种可能的解决方案。

但是,我建议使用intPredicate,因为这允许您将testValue从HandleSomething传递给谓词:

import java.util.function.IntPredicate;

public class Test {
    public static void main(String[] args) {
        int testValue = 23;
        handleSomething(true, testValue, Test::checkIfZero);
        handleSomething(false, testValue, Test::checkIfLargerThanZero);
    }

    private static boolean checkIfZero(int value) {
        if (value == 0)
            return true;
        return false;
    }

    private static boolean checkIfLargerThanZero(int value) {
        if (value > 0)
            return true;
        return false;
    }

    private static void handleSomething(boolean test, int value, IntPredicate function) {
        if (test) {
            System.out.println("Ignore");
            return;
        }

        if (function.test(value))
            System.out.println("Passed");
        else
            System.out.println("Failed");
    }
}
 类似资料:
  • IntelliJ一直建议我用方法引用替换我的lambda表达式。 两者之间有什么客观差异吗?

  • 本文向大家介绍java lambda表达式用法总结,包括了java lambda表达式用法总结的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了java lamda表达式用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、什么是函数式编程(百度百科上的解释) 2、为什么要使用函数式编程(有什么好处) 1、代码简洁,减少代码量 2

  • 问题内容: 我试图弄清楚如何从lambda表达式返回方法值: 但是,似乎在lambda表达式中使用关键字将显式返回lambda函数本身。是否有某种方式可以中断或强制返回整个方法? 问题答案: 是否有某种方式可以中断或强制返回整个方法? 不会。至少,除非抛出异常,否则不会。 基本上,这不是什么意思。您可以编写一个方法,该方法接受一个函数,该函数将返回“继续执行” ,而返回非null则表示“停止,并将

  • 我正在编写一个lambda表达式来将给定的纬度和经度转换为地址。表达式应该以坐标为参数,并返回其相应的地址。但是,返回的值为null。以下是我的班级: 以下是logcat的输出: 以下是我的用法: 是类的对象,以下是相关接口: 当我尝试从相关适配器打印坐标时,它们会正确打印。因此,位置正在正确设置,但是当我试图从另一个类访问它时,它会显示字符串的空值。你能建议一个替代方法来从表达式中提取位置吗?

  • 主要内容:作为参数使用Lambda表达式,访问变量,方法引用在《 Java Lambda表达式》和《 Java Lambda表达式的3种简写方式》一节中我们了解了 Java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见的用途就是作为参数传递给方法,这需要声明参数的类型声明为函数式接口类型。示例代码如下:

  • 在使用lambda表达式返回字符串列表时,我得到了以下字符串: null 和更多的建议。但没有答案对我有帮助。 有人知道这段代码出了什么问题吗?