如何在Java中获得结果使用流?
这里有一个字符串[]如何在Java中获得结果使用流?,java,java-stream,Java,Java Stream,这里有一个字符串[] String[] strings = {"3", "1", "4", "3", "2"}; 我想把它改成一个数字,然后进行排序和累加运算 换号码 分类 累积运算 最后,我想将此代码更改为流 我曾尝试: String[] strings = {"3", "1", "4", "3", "2
String[] strings = {"3", "1", "4", "3", "2"};
我想把它改成一个数字,然后进行排序和累加运算
String[] strings = {"3", "1", "4", "3", "2"};
int asInt = stream(strings)
.mapToInt(Integer::parseInt)
.sorted()
.reduce(Integer::sum)
.getAsInt();
我应该怎么做才能得到我想要的结果?几乎可以肯定有更好的方法,但在有人给出更好的方法之前,这是一个快速解决方案:
final int[]index={strings.length};
最终int结果=Arrays.stream(字符串)
.mapToInt(整数::parseInt)
.已排序()
.减少(0,(a,b)->a+(索引[0]-*b));
这里的想法是,你想要的数字是第一个数5次,第二个数4次,第三个数3次,以此类推
使用
final int[]
作为基本变量,可以在流中使用(必须是final
)<代码>索引[0]--在每一步上确保下一步乘以更少的值。几乎肯定有更好的方法,但在有人给出更好的方法之前,这是一个快速解决方案:
String[] strings = {"3", "1", "4", "3", "2"};
AtomicInteger ai = new AtomicInteger();
Arrays.stream(strings)
.mapToInt(Integer::parseInt)
.sorted()
.map(ai::addAndGet).sum(); // returns 32
final int[]index={strings.length};
最终int结果=Arrays.stream(字符串)
.mapToInt(整数::parseInt)
.已排序()
.减少(0,(a,b)->a+(索引[0]-*b));
这里的想法是,你想要的数字是第一个数5次,第二个数4次,第三个数3次,以此类推
使用
final int[]
作为基本变量,可以在流中使用(必须是final
)<代码>索引[0]--在每一步上确保下一步乘以更少的值。一个明确、直接的解决方案:
String[] strings = {"3", "1", "4", "3", "2"};
AtomicInteger ai = new AtomicInteger();
Arrays.stream(strings)
.mapToInt(Integer::parseInt)
.sorted()
.map(ai::addAndGet).sum(); // returns 32
映射
和排序
数组IntStream
,并sum
第一个i元素sum
32
一个明确、直截了当的解决方案:
映射
和排序
数组IntStream
,并sum
第一个i元素sum
32
要简单地进行转换,请尝试对两个循环使用
IntStream.range…
。唯一应该做的是使用正确的操作。Integer::sum
的作用是对流中的元素求和。在定义操作时,需要打破流的功能优势(访问完整流以获得结果)。可能可以通过某种方式对其进行排序,使其能够进行流式转换。要简单地进行转换,请尝试对两个循环使用IntStream.range…
。您唯一应该做的是使用正确的操作。Integer::sum
的作用是对流中的元素求和。在定义操作时,需要打破流的功能优势(访问完整流以获得结果)。可能可以通过某种方式对其进行排序以使其可流化。无需使用reduce
只需在map(ai::addAndGet)
@Eritrean之后使用sum()
,对于AtomicInteger
,您将需要reduce()
:sum()
除非进行另一次转换,否则无法工作before@VictorPoloDeGyvesMontero不可以。您可以使用map(ai::addAndGet).sum()
,因为在这一点上,流是IntStream
,所以您可以使用sum()
Fixed从@gauthamm添加注释无需reduce
只需使用sum()
在映射(ai::addAndGet)
@Eritrean forAtomicInteger
之后,您需要reduce()
:sum()
将无法工作,除非完成另一次转换before@VictorPoloDeGyvesMontero不可以。您可以使用map(ai::addAndGet).sum()
因为此时流是IntStream
,所以您可以使用sum()
Fixed添加@GauthamMI的注释,我从您的想法中学到了很多。非常感谢你。我从你的想法中学到了很多。非常感谢你。
String[] strings = {"3", "1", "4", "3", "2"};
int asInt = stream(strings)
.mapToInt(Integer::parseInt)
.sorted()
.reduce(Integer::sum)
.getAsInt();
asInt = 13
String[] strings = {"3", "1", "4", "3", "2"};
AtomicInteger ai = new AtomicInteger();
Arrays.stream(strings)
.mapToInt(Integer::parseInt)
.sorted()
.map(ai::addAndGet).sum(); // returns 32
String[] strings = {"3", "1", "4", "3", "2"};
int[] ints = Arrays.stream(strings)
.mapToInt(Integer::parseInt)
.sorted()
.toArray();
int cumulativeSum = IntStream.rangeClosed(1, ints.length)
.map(i -> Arrays.stream(ints)
.limit(i)
.sum())
.sum();
32