参数列表的流过滤条件

时间:2019-07-19 13:41:13

标签: java stream criteria-api

今天,我在使用流API过滤器时遇到了一个有趣的问题。 即,问题如下:我们有一个要过滤的参数列表作为函数参数。使用流,我们要过滤所有记录并返回与我们作为函数参数给出的参数匹配的记录。例如[汽车,2012,50000,奥迪]。我意识到在这种情况下,我可以使用Criteria API或完整搜索文本,但我想仅使用Java流来使用它而无需其他API。

Customer.class


public class Customer {

  @Id
  @GeneratedValue
  private Long id;

  private String name;
  private Integer age;

  @OneToMany(mappedBy = "customer")
  List<CustomerOrder> customerOrders;

}

Product.class

public class Product {

  @Id
  @GeneratedValue
  private Long id;
  private String name;
  private BigDecimal price;

  @ToString.Exclude
  @EqualsAndHashCode.Exclude
  @OneToMany(mappedBy = "product")
  List<CustomerOrder> customerOrders;
}

CustomerOrder.class

public class CustomerOrder {

  @Id
  @GeneratedValue
  private Long id;
  private String description;
  private Integer quantity;

  @ManyToOne(cascade = CascadeType.PERSIST)
  @JoinColumn(name = "customer_id")
  private Customer customer;

  @ManyToOne()
  private Product product;

}

具有完整的Lombok实用程序。

问题在于参数列表可能会有所不同。我们可以将参数顺序混合到[50000,Audi,Car,2012]之类的东西上,并且我们希望得到相同的结果。否则,假设我们有一个先前要由我们验证正确性的参数列表,则可以在下一个参数之后基于过滤对它进行编程,但是在这种情况下,我们不确定。

问题澄清:

我们提供一个要搜索的参数列表作为参数:[50,000,奥迪,汽车,2012]。在正常情况下,假设订单始终是正确的,那么我们首先指定价格,然后指定品牌,商品类型和年份,我们可以使用带有流API的标准过滤器逐条过滤记录,即先搜索价格,然后按品牌等。当订单更改时会出现问题,我们先给出年鉴,然后给出品牌,然后给出价格和商品类型。在这种情况下,我们的过滤器将无法工作,因为它找不到任何东西,因为我们更改了作为过滤函数参数提供的项的顺序。在这种情况下,我们过滤器中负责按参数搜索的部分:价格将收到商品的年份,由于显而易见的原因,假设该价格不会返回令人满意的结果。我希望这次我尽可能总结问题。

非常感谢您的建议。

0 个答案:

没有答案