如何使用 Lambda 和 Streams 在 Java 8 中反转单个字符串?

2022-09-03 03:20:10

我有一个字符串说,我想在Java 8中使用lambda和流来反转它。我该怎么做?"Aniruddh"


答案 1

给定一个字符串,如

String str = "Aniruddh";

规范解决方案是

String reversed = new StringBuilder(str).reverse().toString();

如果出于教育目的,你想通过串流式处理字符串的字符来解决这个问题,你可以这样做,就像

String reversed = str.chars()
    .mapToObj(c -> (char)c)
    .reduce("", (s,c) -> c+s, (s1,s2) -> s2+s1);

这不仅要复杂得多,而且还有很多性能缺陷。

以下解决方案消除了与装箱相关的开销

String reversed = str.chars()
    .collect(StringBuilder::new, (b,c) -> b.insert(0,(char)c), (b1,b2) -> b1.insert(0, b2))
    .toString();

但效率仍然较低,因为插入到基于数组的缓冲区的开头意味着复制所有以前收集的数据。

因此,底线是,对于实际应用,请保留开头显示的规范解决方案。


答案 2

尝试使用 lambda 和流反转字符串

import java.util.stream.Stream;
import java.util.stream.Collectors;

    public class Test  {


        public static void main(String[] args) {

            System.out.println(reverse("Anirudh"));;
        }
        public static String reverse(String string) {
            return Stream.of(string)
                .map(word->new StringBuilder(word).reverse())
                .collect(Collectors.joining(" "));
        }
    }