2017-07-14 95 views
-4

我在想办法使一个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

用'if(rules.size()> 0){...}'来包装循环有什么意义?将'rules.size()'与'0'进行比较正是循环所要做的第一件事。 – Holger

+0

无用的问题,请专注于请求,你可以避免如果条件为我的问题的目的。 –

+0

删除已过时的if语句将改进您的代码,而不是将其重写为“创建Java 8编码”,无论这意味着什么。 Stackoverflow不是一个代码写入服务。 – Holger

回答

1

那么先来这里再说一遍,那些令人反感的评论是确实是不好,请删除它们。第二,你的代码依赖于索引,你选择的任何解决方案与Stream s相比,你现在拥有的清晰简单的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()); 

比较一下冗长,不管你在地方的权利有现在...

+0

感谢您的回应,但对于评论我想让人们可以看到某些“专家”的水平 –

+0

难道你不认为即使它是冗长的,它可以确保更大的数组项目的性能? –

+0

@NatherWebber它*可以*,但你需要**很多**的数据,除非你测量,这很难说。 – Eugene

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))))); 
    }