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

新手上路,请多包涵

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

原文由 Aniruddh Dwivedi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 437
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();

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

所以底线是,对于实际应用程序,请使用开头显示的规范解决方案。

原文由 Holger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题