完全应用接口的多个实现或条件

时间:2018-06-09 02:33:35

标签: java design-patterns

我有一个接口Calculate,它有一个单一的方法计算(List priceList) public interface Calculate { public List<Double> calculate(List<Double> priceList); }

此接口的每个实现都将进行一些计算并检查priceList值的某些条件,如果条件满足该价格值,则它将从priceList返回满意值列表作为输出。

实施例。

`public class CalculateImpl1 implements Calculate { 
       @Override
       public List<Double> calculate(List<Double> priceList) { 
        List<Double> result = new AL();
        loop the priceList
       if(condition1 satisfies on priceList value) { 
         result.add(value); 
       } 
      return result;
    } 
  }

  public class CalculateImpl2 implements Calculate { 
       @Override
       public List<Double> calculate(List<Double> priceList) { 
        List<Double> result = new AL();
        loop the priceList
       if(condition2 satisfies on priceList value) { 
         result.add(value); 
       } 
      return result;
    } 
  }`

假设有一个具有priceList数据的类,我可以使用任何Calculate接口实现将计算应用于该priceList。

问题:如果我想同时将所有计算(CalculateImp1 / condition1,CalculateImpl2 / condition2 ....)应用于priceList,如何实现,意味着priceList应满足所有条件并获得输出?

1 个答案:

答案 0 :(得分:1)

谓词用于:

where in _

然后使用它:

public class CalculateImpl implements Calculate { 
     @Override
     public List<Double> calculate(List<Double> priceList, Predicate<Double> filter) { 
         priceList.stream().filter(filter).collect(Collectors.toList());
    } 
}

结合条件:

Calculate calc = new CalculateImpl();
Predicate<Double> pre1 = d -> {condition1}; 
// Eg: Predicate<Double> pre1 = d -> d > 100; (filter price whose values greater than 100)
List<Double> list1 = calc.calculate(priceLIst, pre1);

使用Predicate<Double> pre2 = d -> {condition2}; List<Double> list2 = calc.calculate(priceList, pre1.and(pre2)); 条件:

or