我正在考虑为这次迭代制作java 8编码的方法:
if(rules.size()>0){
for (int i=0;i<rules.size();i++) {
for(AbstractProductInterface product:products){
if(rules.get(i).getProductsToApply().contains(product.getClass()){
productDiscounts.add(new ConcreteProductDecorator(product, rules.get(i),conditions.get(i)));
}
}
}
答案 0 :(得分:2)
首先我会在这里再说一遍,那些令人反感的评论真的不好,请删除它们。
其次,您的代码依赖于索引,而您使用Stream
选择的任何解决方案都会非常难看且不可读取,与您目前的简单for循环相比。
我只能假设这样可行(我没有编译它,因为你既没有提供类也没有提供一些测试数据):
IntStream.range(0, rules.size())
.boxed()
.flatMap(x -> products.stream()
.filter(p -> rules.get(x).getProductsToApply().contains(p.getClass()))
.map(y -> new AbstractMap.SimpleEntry<>(x, y)))
.map(e -> new ConcreteProductDecorator(e.getValue(), rules.get(e.getKey()), conditions.get(e.getKey())))
.collect(Collectors.toList());
将此详细程度与您现有的任何内容进行比较......
答案 1 :(得分:0)
您可以像在Java 8中一样重写迭代
if (rules.size() > 0) {
IntStream.of(rules.size()).forEach(i -> products.stream().filter(product -> rules.get(i).getProductsToApply().contains(product.getClass())).forEach(product -> productDiscounts.add(new ConcreteProductDecorator(product, rules.get(i), conditions.get(i)))));
}