Java Int流和收集
因此,我很难理解从Java Int流和收集,java,java-8,java-stream,Java,Java 8,Java Stream,因此,我很难理解从IntStream收集的这个供应商、累加器和合路器的原理。我找到了一个例子 IntStream.range(6,11) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append); 有人介意解释一下StringBuilder::appendCodePoint部分吗?如果我们这样写
IntStream
收集的这个供应商、累加器和合路器的原理。我找到了一个例子
IntStream.range(6,11)
.collect(StringBuilder::new,
StringBuilder::appendCodePoint,
StringBuilder::append);
有人介意解释一下StringBuilder::appendCodePoint部分吗?如果我们这样写会怎么样:
IntStream.range(6, 11)
.collect(StringBuilder::new,
(StringBuilder sb, int x) -> sb.appendCodePoint(x),
StringBuilder::append);
collect(Supplier<StrinBuilder> supplier,
ObjIntConsumer<StrinBuilder> accumulator,
BiConsumer<StrinBuilder, StrinBuilder> combiner);
累加器是一个使用者
,它接受一个整数
作为参数,不返回任何内容
StringBuilder::appendCodePoint
是一个方法引用,其作用与lambda表达式相同 让我们将这个流包装成byte[]
,然后从结果数组中生成String
:
Arrays.toString(IntStream.range(6,11).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString().getBytes())
这将使我们:
[6, 7, 8, 9, 10]
收集是如何工作的?
它获取6..10
流并按以下顺序收集它:
StringBuilder
实例StringBuilder::appendCodePoint
将Unicode代码点附加到累加器。(相当于:(StringBuilder sb,int x)->sb.appendCodePoint(x)
)StringBuilder
实例中。(相当于:(StringBuilder sb1、StringBuilder sb2)->sb1.append(sb2)
)collect()
调用的类型签名如下所示:
IntStream.range(6, 11)
.collect(StringBuilder::new,
(StringBuilder sb, int x) -> sb.appendCodePoint(x),
StringBuilder::append);
collect(Supplier<StrinBuilder> supplier,
ObjIntConsumer<StrinBuilder> accumulator,
BiConsumer<StrinBuilder, StrinBuilder> combiner);
收集(供应商、,
ObjIntConsumer累加器,
双消费组合器);
很好的例子。谢谢你的解释。