提问人:Bijaya Bhaskar Swain 提问时间:11/9/2023 最后编辑:Bijaya Bhaskar Swain 更新时间:11/9/2023 访问量:90
如何使用java8流API通过每个字符连接两个字符串?[复制]
How to concat two Strings by each character by using java8 stream API? [duplicate]
问:
我需要帮助解决这个问题,我有两个字符串
String s1 = "Mohan";
String s2 = "1234567";
我需要输出为
"M1o2h3a4n567"
就像 S1 第一个字符,然后是 S2 第一个字符。
如何使用 java8 流 API 解决这个问题?
我将两个字符串转换为一个列表,然后在流 API 中尝试使用 reduce,但我知道这不是正确的解决方案。
答:
1赞
MC Emperor
11/9/2023
#1
嗯,有很多选择,每个选项都有优点和缺点。
这是另一种方法,使用 an 和 a :IntStream
StringBuilder
String result = IntStream.range(0, Math.max(s1.length(), s2.length()))
.collect(
StringBuilder::new,
(sb, i) -> {
if (i < s1.length()) {
sb.append(s1.charAt(i));
}
if (i < s2.length()) {
sb.append(s2.charAt(i));
}
},
StringBuilder::append
)
.toString();
这里发生的事情是,我们在两个字符串中最大的字符串的所有索引上循环(使用 )。IntStream
max(s1.length(), s2.length())
然后我们收集到 ,如果存在,则将字符从 添加,然后为 。StringBuilder
s1
s2
请注意,此代码不使用任何中间子字符串。
但是,我认为 ol' skool for 或 foreach 循环与使用流一样好。
评论
String result = IntStream.range(0, Math.max(s1.length(), s2.length())).mapToObj(i -> (i < s1.length() ? s1.charAt(i) + "" : "") + (i < s2.length() ? s2.charAt(i) + "" : "")).collect(Collectors.joining());