给定一个数字字符串,我想在字符串中的每n位数应用一个操作。这可能与java流?
例如,对于字符串“12345”
,并对每2个字符应用3的和,结果将是“15375”
。
public static void main(String[] args) {
"12345".chars()
.mapToObj(Character::getNumericValue)
.mapToInt(c -> c + 3) //should only happen every 2nd character
.forEach(System.out::print);
}
上面的结果是45678
,因为总和应用于所有字符。
你可以这样做。
(i 1)%n
以第n个字符开头
String s = "12345";
int n = 2;
IntStream.range(0, s.length())
.map(i -> (i+1) % n == 0 ? s.charAt(i) - '0' + 3 :
s.charAt(i) - '0')
.forEach(System.out::print);
指纹
15375
您可以使用范围运算符将索引添加到流中:
String myString = "12345";
int n = 2;
IntStream
.range(0, myString.length())
.mapToObj(i -> Map.entry(i, Character.getNumericValue(myString.charAt(i))))
.mapToInt(pair -> (pair.getKey() + 1) % n == 0 ? pair.getValue() + 3 : pair.getValue())
.forEach(System.out::print);
我相信这就是你要找的:
public static void main(String[] args) {
String string = "12345";
String result = IntStream.range(0, string.length())
.mapToObj(index -> incrementCharAtEvenIndex(string, index, 3))
.collect(Collectors.joining());
System.out.println(result);
}
static String incrementCharAtEvenIndex(String string, int index, int increment) {
int number = Character.getNumericValue(string.charAt(index));
if ((index + 1) % 2 == 0) {
number = number + increment;
}
return String.valueOf(number);
}
不幸的是,Stream API不是为直接使用索引而构建的,因此您必须使用IntStream来模拟for循环,并使用自定义方法来增加出现在偶数索引中的数字字符(请记住它从0开始)。
我有一个名为计算的方法,它需要太长时间才能完成。所以我决定将我的信息列表对象部分发送到这个方法。我如何遍历每n个元素?
问题内容: 例如,是否可以选择一组元素中的每个第四个元素? 例如:我有16个元素…我可以写类似的东西。 有一个更好的方法吗? 问题答案: 顾名思义,它允许您使用除常数以外的变量构造算术表达式。您可以执行加法(),减法()和系数乘法(其中是整数,包括正数,负数和零)。 这是重写上面的选择器列表的方法: 有关这些算术表达式如何工作的解释,请参见我对该问题的回答以及规范。 请注意,此答案假设同一父元素内
在我的Java应用程序中,我使用以下流: 列表包含9个字符串,上面的代码只对第一个执行操作,而对另一个执行操作。 如何更改代码为列表中的每个元素触发相同的操作?
我有一个这样的数字列表: 如何以优雅的方式总结每个N(让我们假设2)个元素并将列表转换为: 编辑:我想出了以下解决方案: 它是有效的,但我仍然在寻找一个更易读、更简单的方法。
如果最后没有足够的元素用于n间隔,则忽略此间隔
我希望每次只呈现数组中的三个元素。 每次我将单击em来更改数字。 例如:在屏幕上:123,我点击了在按钮,会出现456和以上。 MyCode: