【问题标题】:Java 8 --- Lambda Expression [closed]Java 8 --- Lambda 表达式 [关闭]
【发布时间】:2015-10-05 16:24:44
【问题描述】:
import java.util.function.Function;

public class LambdaExpression {


    @SuppressWarnings("rawtypes")
    public static Function create(int addTo){
        int n = 1;
        Function<Integer, Integer> f = addT -> addTo + n;

        return f;
    }


    public static void main(String[] args){
        System.out.println(LambdaExpression.create(5));
    }
}

在运行时给我这个错误:

LambdaExpression$$Lambda$1/424058530@1c20c684

【问题讨论】:

  • 是什么让您认为这是一个错误?您创建了一个Function,并尝试打印函数本身,隐式调用toString()...这给了您一个相对不可读(但不是不正确)的字符串值。
  • 这是错误还是只是程序的输出?
  • 我的程序的输出
  • 程序应该给每个输入加 1
  • 你可能打算使用LambdaExpression.create(5).apply(6)

标签: java lambda java-8 expression


【解决方案1】:

如果你想创建一个输入加1的函数,create这个函数的方法不需要参数...但是你需要调用 em> 该函数以执行它。我怀疑你想要:

import java.util.function.Function;

public class LambdaExpression {
    public static Function<Integer, Integer> create() {
        Function<Integer, Integer> f = x -> x + 1;    
        return f;
    }

    public static void main(String[] args) {
        Function<Integer, Integer> f = create();
        System.out.println(f.apply(5)); // 6
    }
}

如果您实际上想要一个函数来添加您传递给 create 方法的任何内容(而不是总是添加 1),这很简单:

import java.util.function.Function;

public class LambdaExpression {
    public static Function<Integer, Integer> create(int addTo) {
        Function<Integer, Integer> f = x -> x + addTo;
        return f;
    }

    public static void main(String[] args) {
        Function<Integer, Integer> f = create(3);
        System.out.println(f.apply(5)); // 8
    }
}

【讨论】:

  • /AdderFactoryTest.java:9: 错误:类 AdderFactory 中的方法创建不能应用于给定类型; 5、AdderFactory.create(1).applyAsInt(4)); ^ 必需:未找到参数:int 原因:实际参数列表和形式参数列表的长度不同 1 错误
  • 导入 java.util.function.Function; public class AdderFactory { /* * 创建“create”方法(公共的,静态的)。它接受一个参数(int addTo)并返回*一个函数(确保使用适当的类型)。此函数接受一个整数,* 将“addTo”添加到该整数,并将结果作为整数返回(整数到整数函数)。 */ public static Function create() { Function f = x -> x + 1;返回 f; } }
  • @RonOhare:你说你想要一个总是加 1 的函数。你为什么想要一个参数呢?不过,请参阅我的编辑以了解您可能想要的内容。当您还没有真正明确提出问题时,很难回答...
  • 您的解决方案有效,我已经在 Eclipse 中尝试过。但是,系统正在寻找我还不知道的特定内容。非常感谢您对 lambda 表达式的帮助。
  • @RonOhare:“系统”是什么意思?我们这里的上下文为零。请阅读tinyurl.com/stack-hints 以帮助您提出更清晰的问题。
【解决方案2】:

这是预期的行为。

有意隐藏 lambda 的 toString(),以避免依赖于 lambda 实现方式的内部工作原理。他们希望能够更改 lambdas 的实现,而不必支持 toString。虽然我不同意这种方法,但它不会使其成为错误。

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 2022-11-14
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2015-07-05
    • 1970-01-01
    相关资源
    最近更新 更多