--- old/src/share/classes/java/util/stream/ReferencePipeline.java 2013-07-05 16:28:22.358021891 -0700 +++ new/src/share/classes/java/util/stream/ReferencePipeline.java 2013-07-05 16:28:18.650021957 -0700 @@ -490,16 +490,21 @@ } @Override - public final R collect(Collector collector) { + public final R collect(Collector collector) { + A container; if (isParallel() && (collector.characteristics().contains(Collector.Characteristics.CONCURRENT)) && (!isOrdered() || collector.characteristics().contains(Collector.Characteristics.UNORDERED))) { - R container = collector.resultSupplier().get(); - BiFunction accumulator = collector.accumulator(); - forEach(u -> accumulator.apply(container, u)); - return container; + container = collector.supplier().get(); + BiConsumer accumulator = collector.accumulator(); + forEach(u -> accumulator.accept(container, u)); } - return evaluate(ReduceOps.makeRef(collector)); + else { + container = evaluate(ReduceOps.makeRef(collector)); + } + return collector.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH) + ? (R) container + : collector.finisher().apply(container); } @Override