在代码审查期间,我建议对JDK8 +流进行代码改进。 原始代码看起来非常相似,如下所示:
List<Element> result = content.getFancyStuffs().stream()
.flatMap(item -> {
List<Element> objects = new ArrayList<>();
objects.add(item.getElement());
objects.addAll(item.getElements());
return objects.stream();
})
.collect(toList());
这里有更多细节。 的get花式的东西s()返回列表花式的东西元素。 的花式的东西类包含两个吸气剂,其中get元件()返回一个元件而get元件s()返回(猜猜是什么?)列表元件的。
有趣的是,lambda创建了一个新的数组列表并添加一个元素objects。add(item。getElement())第二部分通过添加一些元素objects。addAll(item。getElements)。
基于更好的可读性,我的建议是改为使用以下代码:
List<Element> result = content.getFancyStuffs()
.stream()
.flatMap(fs -> Stream.concat(Stream.of(fs.getElement()), fs.getElements().stream()))
.collect(Collectors.toList());
到现在为止还挺好。 但是一段时间之后,我开始考虑这两种解决方案。 我问自己:哪一个更快? 哪一个使用更多的内存? (开发人员通常会问的问题?不是吗?)。
那么您会猜哪一个是更快的解决方案? 第一个还是第二个? 我的猜测是,第一个解决方案将获胜,但要基于一些假设。 这意味着要通过的元素数量content.getFancyStuffs()。stream()..或多或少(小于20),并且返回的元素数量由item.getElements()也相当小(小于20)。
The only thing which can help here to get a reliable answer is to measure it. No assumptions, no educat