1

Java中使用 Lambda 实现字符串反转

 9 months ago
source link: https://www.jdon.com/71107.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Java中使用 Lambda 实现字符串反转

Java8以后lambda 表达式函数使编写更短、更具表现力的代码行成为可能。您可以使用 lambda 表达式有效地将代码作为数据传输或将函数视为方法参数。它们经常用于函数式编程,从而产生了一种更简洁的技术来实现函数式接口。

如果一个接口只有一个抽象方法,那么它就是函数式的。
要使其充当接口,它必须只有一个抽象方法;它还可能包括默认方法和静态方法。
Java 中函数式接口的示例有 Runnable、Comparator、Consumer、Function、Predicate 等。

lambda 表达式具有以下语法:
(参数列表) -> { 表达式主体 }  

  • 输入参数列在参数列表中;对于具有单个参数的函数接口,可以删除括号。
  • 该函数的实现代码可以包含在单个表达式中,也可以包含在花括号中的代码块中,可以在 表达式主体 中找到。

下面是一个函数式界面的 lambda 表达式的简单示例,该表达式接受两个数字并返回它们的和:

interface SumCalculator {  
    int calculate(int a, int b);  
}  
public class LambdaExample {  
    public static void main(String[] args) {  
        SumCalculator calculator = (a, b) -> a + b;  
        System.out.println(calculator.calculate(5, 7)); // Output: 12  
    }  
}  

将 Lambda 与函数接口结合使用
在与函数式接口交互时,lambda 可以明确替代匿名内部类。
您可以使用 lambda 表达式立即给出实现,而不是构建一个冗长的匿名内部类。
例如,当使用匿名内部类和 Runnable 功能接口时

Runnable r = new Runnable() {  
    public void run() {  
        System.out.println("Running!");  
    }  
};  

等同效果lambda 表达式
Runnable r = () -> System.out.println("Running!");  

捕获变量
局部变量或实例变量可以通过 lambda 表达式从它们所包含的作用域中捕获。这些变量必须是真正的最终变量(记录后无法更改)。
lambda 表达式支持使用捕获的变量。

public class LambdaVariableCapture {  
    public static void main(String[] args) {  
        int x = 10;  
        Runnable r = () -> {  
            System.out.println("Value of x: " + x);  
        };  
        r.run(); // Output: Value of x: 10  
    }  
}  

方法引用
描述 lambda 表达式的另一种方法是使用方法引用,尤其是当 lambda 调用现有方法时。由于方法引用简单明了,代码更容易理解。

方法引用有四种类型

  • 静态方法引用:包含类::staticMethodName
  • 特定对象的实例方法引用:obj::instanceMethodName
  • 特定类型的任意对象的实例方法引用:包含类型::方法名
  • 构造函数引用:类名::new

将 Lambda 与流结合使用
对于集合上的许多操作,包括过滤、映射、还原和其他处理,Lambda 经常与 Java 流结合使用。
Lambda 简化了对流元素的操作描述,而流则提供了一种处理数据的功能性方法。
lambdas 是彻底改变 Java 代码编写方式的关键因素。它们鼓励使用函数式编程技术,使代码更具表现力和可理解性。如果使用得当,lambdas 可以显著提高 Java 代码的质量,使其更具可扩展性和可管理性。

import java.util.stream.IntStream;  
import java.util.stream.Stream;  
public class StringReverseWithLambda {  
    public static void main(String[] args) {  
        String originalString = "Hello, World!";  
        IntStream charStream = originalString.chars();  
        Stream<String> charStringStream = charStream.mapToObj(ch -> String.valueOf((char) ch));  
        String reversedString = charStringStream.reduce((acc, ch) -> ch + acc).orElse("");  
        System.out.println(reversedString); // Output: !dlroW ,olleH  
    }  
}  

使用 lambda 和StringBuilder类

import java.util.function.Function;

public class StringReverseExample {
    public static void main(String[] args) {
        String input = "Hello, World!";

// Using lambda expression
        Function<String, String> reverseFunction = str ->
                new StringBuilder(str).reverse().toString();

String reversed = reverseFunction.apply(input);

System.out.println("Original: " + input);
        System.out.println("Reversed: " + reversed);
    }
}

在此示例中,lambda 表达式用于创建Function接受 aString并返回其相反值的 a。用于StringBuilder有效地反转字符串,并将toString()其转换回String.
这是在 Java 8 中使用 lambda 实现字符串反转的一种简单而简洁的方法。请记住,Java 8 引入了该java.util.function包,其中包含各种函数接口,使您可以更方便地使用 lambda 表达式和方法引用。

使用 Stream 和 reduce() 方法

public static String reverse(String str) {
    return str.chars()
            .reduce("", (acc, c) -> acc + (char) c)
            .reverse();
}

该方法首先使用 chars() 方法将字符串转换为 Stream 对象。然后使用 reduce() 方法将字符串中的所有字符按顺序连接起来,并将结果存储在 acc 变量中。最后,使用 reverse() 方法将 acc 变量的值反转。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK