【发布时间】:2014-01-28 15:07:57
【问题描述】:
考虑一下我目前的以下课程:
public interface Drawable {
public void compileProgram();
public Program getProgram();
public int getDataSize();
public FloatBuffer putData(final FloatBuffer dataBuffer);
public int getDataMode();
public static int countDataSize(final Collection<Drawable> drawables) {
return drawables.stream().mapToInt((drawable) -> drawable.getDataSize()).sum();
}
public static FloatBuffer putAllData(final List<Drawable> drawables) {
FloatBuffer dataBuffer = BufferUtils.createFloatBuffer(countDataSize(drawables) * 3);
drawables.stream().forEachOrdered((drawable) -> dataBuffer.put(drawable.putData(dataBuffer)));
return (FloatBuffer)dataBuffer.clear();
}
}
现在看看countDataSize:
- 我输入
Collection<Drawable>,因为我不关心顺序,我只想总结它们的大小。 - 我使用
drawables.stream(),如果我传入Stream<Drawable>参数,这将是多余的。
接下来看看putAllData:
- 就像这里所说的那样,我有
List<Drawable> drawables,因为这次的顺序很重要。 - 我使用
drawables.stream()来访问它们,这是按照forEachOrdered()的顺序发生的。
我希望使用Stream<Drawable> 作为输入,但是传递Collection<Drawable> 或List<Drawable> 是否有效?如果是这样,我如何确保在第一种情况下顺序无关紧要,而在第二种情况下很重要?
【问题讨论】:
-
旁注:
drawables.stream().mapToInt((drawable) -> drawable.getDataSize()).sum();可以写drawables.stream().mapToInt(Drawable::getDataSize).sum();
标签: java lambda java-8 java-stream