付费阅读网站代码,做网站需要什么软件,深圳app开发公司大概价格,品牌建设书籍我本来要写一篇关于如何将流与每个元素的索引混合的文章#xff0c;但是Baeldung上的人们已经很好地涵盖了这个主题 #xff01; 鉴于我是他们编辑团队的一员#xff0c;我为他们/我们感到自豪。 有趣的是#xff0c;特别是Streams中的Java函数式编程如何使我们脱离了一些… 我本来要写一篇关于如何将流与每个元素的索引混合的文章但是Baeldung上的人们已经很好地涵盖了这个主题 鉴于我是他们编辑团队的一员我为他们/我们感到自豪。 有趣的是特别是Streams中的Java函数式编程如何使我们脱离了一些常见的模式。 例 ListFoo foos new ArrayList();
for (int i0; i bars.size(); i) {foos.add(new Foo(i, bars.get(i));
} 上面的代码从索引创建一个新的Foo 从源列表创建一个bar 。 当Stream.collect是一个更大的信号我们要从迭代中提取数据时我们不喜欢在for循环中间使用add 。 同样当我们可以在流声明中更明确地表示有效的Stream.map时我们不希望将其隐藏在循环中。 我们都知道以上内容应读为 ListFoo foos bars.stream().map( ... something ...).collect(toList()); 尴尬的挑战是某些事情不容易完成。 如何选择做什么 总体而言围绕流操作编写复杂的功能清单是一种隐藏流要向我们展示的东西的方法即数据如何从一个地方转到另一个地方。 所以这是一些想法 也许只有一个for循环–可能会更容易 如果您发现操作主体中的主要参与者是索引那么请进行一系列索引并在最后一分钟将对象与List.get混合假设您的列表已被有效索引 如果主要玩家是一个对象则可以存储一个计数器 AtomicInteger是一个不错的选择并在最后一刻增加它注意排序和并行流 如果代码变得复杂请尝试通过提取函数来将流逻辑与业务逻辑分离 也许将其委托给一个图书馆-Baeldung的文章展示了ProtonPack和其他可能更好的东西它们已经过测试和记录。 无论您做什么都不要从原则上使自己变得困难。 翻译自: https://www.javacodegeeks.com/2019/08/object-index-streams.html