Java 函数可以用作输入或从其他函数返回是什么意思?

Java 函数可以用作输入或从其他函数返回是什么意思?,java,lambda,java-8,functional-programming,Java,Lambda,Java 8,Functional Programming,此语句在函数式编程中的含义是什么: 函数可以用作输入,也可以作为其他函数的输出返回” 我们也可以在简单编程中使用函数作为输入。例如: public int getaddition(int a,int b) { return a+b; } 我们可以称之为: getaddition(getFirstNumber(),getSecondNumber()) 谁能解释一下这个说法吗?我真的不明白这个定义 编辑-感谢所有的答案。我得到了答案,但我对关于函数式编程的这句话还有一点困惑- 对于给

此语句在函数式编程中的含义是什么:

函数可以用作输入,也可以作为其他函数的输出返回”

我们也可以在简单编程中使用函数作为输入。例如:

public int getaddition(int a,int b)  {
    return a+b;
} 
我们可以称之为:

getaddition(getFirstNumber(),getSecondNumber())
谁能解释一下这个说法吗?我真的不明白这个定义

编辑-感谢所有的答案。我得到了答案,但我对关于函数式编程的这句话还有一点困惑-

对于给定的输入,它总是返回相同的输出


您的代码片段没有演示“函数可以用作输入或作为其他函数的输出返回”“声明。您的
getaddition
方法接受
int
参数并返回
int
。您正在将其他方法调用返回的
int
值传递给它,而不是传递任何函数

将函数作为输入传递给方法意味着传递实现某个函数接口的类的实例

例如:

public static int applyOperation(BinaryOperator<Integer> op,int a,int b)  {
    return op.apply (a, b);
}
结果是9

还可以将执行乘法的函数传递给该方法:

int result = applyOperation ((a,b )-> a * b, 4, 5);
结果是20

从方法返回函数意味着该方法的返回类型将是某个函数接口

例如,下面是一个方法,该方法返回执行加法的函数接口:

int result = applyOperation ((a,b) -> a + b, 4, 5);
public static BinaryOperator<Integer> addition() {
    return (a,b) -> a + b;
}
这里,
getaddition
的输入和输出是简单的整数

getaddition(getFirstNumber(),getSecondNumber())
不会将函数传递给
getaddition
,而是传递调用函数的结果,该函数只是一个数字

引号所指的是将函数本身作为值传递的能力。例如,在JavaScript中,可以过滤值数组:

const number=[1,2,3,99,42,78,15,14,13];
const evens=numbers.filter(函数(x){返回x%2==0;});

控制台日志(evens)在函数式编程中,函数与任何其他值一样处理。这意味着它们可以作为参数传递,也可以从方法返回

例如,以下方法接受一个函数并返回另一个与输入函数返回的结果相乘的函数:

public Function<Integer, Integer> multiply2(Function<Integer, Integer> function) {
    return i -> function.apply(i) * 2;
}
公共函数倍数2(函数){
返回i->function.apply(i)*2;
}
请记住,这些计算实际上并没有执行。这只是我们意志的表达

如果希望某个操作发生,则需要显式调用其方法:

Function<Integer, Integer> function = multiply2(i -> i + 1);
function.apply(42);
Function=multiply2(i->i+1);
功能。应用(42);

我相信这句话是关于FP的一个重要特征的:

在函数可以作为参数传递的特定方面,我想用Java(作为示例的语言)对其进行示例。让我们以
Collections.sort
为例,假设我们想要使用自定义比较器对
People
对象列表进行排序,在Java8之前,必须传递
comparator
对象

       Collections.sort(list, new Comparator<People>() {
            @Override
            public int compare(People o1, People o2) {
                return o1.name.compareTo(o2.name);
            }
        });
在本例中,我们将函数作为参数传递给
Collections.sort
。我们甚至可以传递一个“匿名”函数,也就是lambda

Collections.sort(list, (o1, o2) -> o1.name.compareTo(o2.name));
Ps:最后,Java并不是FPL dispite Java 8的改进。一个简单的例子是,每个参数都必须声明为某种“类型”,例如
比较器
双功能
。函数类型或
functioninterface
名称使其听起来像函数。事实并非如此。接口是对象行为的蓝图。简而言之,与对象不同,函数不是Java中的第一类函数。
看看Scala,您可以将函数param声明为
(String,String)=>Int
,这是一个纯函数标记。

从其他答案可以清楚地看出,您展示的方法不是一个函数,因为它既不接受函数,也不返回函数

转到你的问题:

这个语句在函数式编程中的意义是什么

函数可以用作输入,也可以作为其他函数的输出返回 功能

正如Java语言所支持的那样。我们说,一级函数本身就是作为对象处理的函数,这意味着我们可以将函数作为参数传递给另一个函数,从函数返回函数,将函数存储在变量中,或将它们存储在数据结构中

对,这听上去可能很模糊,;那么用Java术语来说,这到底意味着什么呢


它只是意味着如果一个方法的参数或返回值是any,例如
函数
谓词
供应商
等,那么该方法就是a,这就是上面引用的内容。

我是否可以建议将
添加()
重命名为
getOperation()
,并让它采用
“+”
“*”
并返回一个函数进行加法或乘法(或对任何其他输入引发异常)。我认为,这仍然是非常简单的,并且将真正演示如何返回函数。
       Collections.sort(list, new Comparator<People>() {
            @Override
            public int compare(People o1, People o2) {
                return o1.name.compareTo(o2.name);
            }
        });
       public int comparePerson(People o1, People o2) {
                return o1.name.compareTo(o2.name);
            }
       Collections.sort(list, comparePerson);
Collections.sort(list, (o1, o2) -> o1.name.compareTo(o2.name));