Java 中的函数式编程示例
原文:https://www . geesforgeks . org/functional-programming-in-Java-with-examples/
到目前为止,Java 支持命令式编程和面向对象编程。java 加入的下一件大事是,随着 Java 8 的发布,Java 已经开始支持函数式编程风格。在本文中,我们将讨论 Java 8 中的函数式编程。 什么是函数式编程? 它是一种声明式的编程风格,而不是命令式的。与传统的编码风格相比,这种编程风格的基本目标是使代码更简洁、更简单、更可预测、更容易测试。函数式编程处理某些关键概念,如纯函数、不可变状态、无赋值编程等。 函数式编程 vs 纯函数式编程: 纯函数式编程语言本质上不允许任何可变性,而函数式风格语言提供更高阶的功能,但往往允许可变性,风险是我们无法做正确的事情,这给我们带来了负担,而不是保护我们。因此,一般来说,我们可以说,如果一种语言提供了高阶函数,它就是函数式语言,如果一种语言除了高阶函数之外,还限制了可变性,那么它就变成了纯函数式语言。Java 是一种函数式语言,像 Haskell 这样的语言是一种纯粹的函数式编程语言。 我们来了解一下功能编程中的几个概念:
- 高阶函数:在函数编程中,函数被认为是一等公民。也就是说,到目前为止,在遗留的编码风格中,我们可以用对象做下面的事情。
- 我们可以将对象传递给一个函数。
- 我们可以在函数内创建对象。
- 我们可以从函数中返回对象。
- 我们可以将函数传递给函数。
- 我们可以在函数内创建一个函数。
- 我们可以从一个函数返回一个函数。
- 【纯函数】 : 如果一个函数总是为相同的参数值返回相同的结果,并且它没有像修改参数(或全局变量)或输出某些东西那样的副作用,那么它被称为纯函数。
- Lambda 表达式:Lambda 表达式是一个匿名方法,它的可变性非常小,只有一个参数列表和一个主体。返回类型总是根据上下文来推断。另外,请注意,Lambda 表达式与函数接口并行工作。λ表达式的语法是:
(parameter) -> body
- 在其简单形式中,λ可以表示为逗号分隔的参数列表、–>符号和主体。
如何用 Java 实现函数式编程?
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate
// anonymous method
import java.util.Arrays;
import java.util.List;
public class GFG {
public static void main(String[] args)
{
// Defining an anonymous method
Runnable r = new Runnable() {
public void run()
{
System.out.println(
"Running in Runnable thread");
}
};
r.run();
System.out.println(
"Running in main thread");
}
}
Output:
Running in Runnable thread
Running in main thread
如果我们看一下 run() 方法,我们用 Runnable 包装它。直到 Java 7 之前,我们都是这样初始化这个方法的。同样的程序可以用 Java 8 重写为:
Java 语言(一种计算机语言,尤用于创建网站)
// Java 8 program to demonstrate
// a lambda expression
import java.util.Arrays;
import java.util.List;
public class GFG {
public static void main(String[] args)
{
Runnable r
= ()
-> System.out.println(
"Running in Runnable thread");
r.run();
System.out.println(
"Running in main thread");
}
}
Output:
Running in Runnable thread
Running in main thread
现在,上面的代码已经被转换成 Lambda 表达式而不是匿名方法。这里我们计算了一个没有名字的函数,这个函数是一个 lambda 表达式。因此,在这种情况下,我们可以看到一个函数已经被评估并分配给一个可运行的接口,在这里这个函数被视为一级公民。 将一些函数从 Java 7 重构到 Java 8: 到目前为止,我们已经多次使用循环和迭代器来处理 Java 7,如下所示:
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate an
// external iterator
import java.util.Arrays;
import java.util.List;
public class GFG {
public static void main(String[] args)
{
List<Integer> numbers
= Arrays.asList(11, 22, 33, 44,
55, 66, 77, 88,
99, 100);
// External iterator, for Each loop
for (Integer n : numbers) {
System.out.print(n + " ");
}
}
}
Output:
11 22 33 44 55 66 77 88 99 100
上面是 Java 中 forEach 循环的一个例子外部迭代器的一个类别,下面是一个例子和另一种形式的外部迭代器。
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate an
// external iterator
import java.util.Arrays;
import java.util.List;
public class GFG {
public static void main(String[] args)
{
List<Integer> numbers
= Arrays.asList(11, 22, 33, 44,
55, 66, 77, 88,
99, 100);
// External iterator
for (int i = 0; i < numbers.size(); i++) {
System.out.print(numbers.get(i) + " ");
}
}
}
Output:
11 22 33 44 55 66 77 88 99 100
我们可以用 Java 8 中引入的内部迭代器来转换上面的外部迭代器示例,如下所示:
Java 语言(一种计算机语言,尤用于创建网站)
// Java 8 program to demonstrate
// an internal iterator
import java.util.Arrays;
import java.util.List;
public class GFG {
public static void main(String[] args)
{
List<Integer> numbers
= Arrays.asList(11, 22, 33, 44,
55, 66, 77, 88,
99, 100);
// Internal iterator
numbers.forEach(number
-> System.out.print(
number + " "));
}
}
Output:
11 22 33 44 55 66 77 88 99 100
版权属于:月萌API www.moonapi.com,转载请注明出处