Ani*_*edi 6 java lambda java-stream
我有一个字符串说"Aniruddh"
,我想在Java 8中使用lambda和流来反转它.我该怎么做?
Hol*_*ger 23
给出一个字符串
String str = "Aniruddh";
Run Code Online (Sandbox Code Playgroud)
规范的解决方案是
String reversed = new StringBuilder(str).reverse().toString();
Run Code Online (Sandbox Code Playgroud)
如果,为了教育目的,你想通过流式传输字符串的字符来解决这个问题,你可以这样做
String reversed = str.chars()
.mapToObj(c -> (char)c)
.reduce("", (s,c) -> c+s, (s1,s2) -> s2+s1);
Run Code Online (Sandbox Code Playgroud)
这不仅复杂得多,而且还存在许多性能缺陷.
以下解决方案消除了拳击相关的开销
String reversed = str.chars()
.collect(StringBuilder::new, (b,c) -> b.insert(0,(char)c), (b1,b2) -> b1.insert(0, b2))
.toString();
Run Code Online (Sandbox Code Playgroud)
但由于插入基于数组的缓冲区的开头意味着复制以前收集的所有数据,因此效率仍然较低.
因此,对于实际应用而言,最重要的是保持开头所示的规范解决方案.
尝试使用 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(" "));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11570 次 |
最近记录: |