我如何在另一个过滤器java.streams中使用use过滤器

时间:2019-07-16 18:41:00

标签: java java-8 java-stream

我在相当长的一段时间内一直在解决此过滤问题。希望能对此有所帮助。

givenDoc是TicketingDocumentInfo类的, docsToMatch是我需要查找数学ID的列表

问题是我不能对这些类进行太多更改,因为它是较大项目的一部分

就是这样。

class TicketingDocumentInfo{
      private TicketingDocument;

      getDocument();
}

class TicketingDocument{
      private List<TicketingDocumentCoupon> coupons;
      getCoupons();
} 

class TicketingDocumentCoupon{
      private List<String> Id;  <--- only one string can be here so it's like just String
      getRefsId();
}

样本数据:

TicketingDocumentInfo doc = new TicketingDocumentInfo(new TicketingDocument(new List().add(new TicketingDocumentCoupon(4))))
List<TicketingDocumentInfo> docsToMatch = new List(  
new TicketingDocumentInfo(new TicketingDocument(new List().add(new TicketingDocumentCoupon(2),  
new TicketingDocumentInfo(new TicketingDocument(new List().add(new TicketingDocumentCoupon(3),  
new TicketingDocumentInfo(new TicketingDocument(new List().add(new TicketingDocumentCoupon(4))

我希望得到docsToMatch [2]

当前阶段:

  return ancillaries.stream()
                        .filter(d -> d.getDocument().getCoupons().stream()
                                .flatMap(e -> e.getServiceItemRefIds().stream())
                                .anyMatch(refsId::contains))
                        .findFirst();

但是我无法正确映射它。

1 个答案:

答案 0 :(得分:0)

如果您拥有RSpec.configure do |config| config.include(Module.new do attr_writer :expectation_set_count def expectation_set_count @expectation_set_count ||= 0 end def expect(*) self.expectation_set_count += 1 super end end) config.after do expect(expectation_set_count).to be > 0 end end 的{​​{1}}或Set<String>,则可以使用它来过滤所有文档:

List<String>

这使用refsId来获取包含给定文档的所有refsId的Stream。之后,您可以使用Optional<TicketingDocumentInfo> result = docsToMatch.stream() .filter(d -> d.getDocument().getCoupons().stream() .flatMap(c -> c.getRefsId().stream()) .anyMatch(refsId::contains)) .findFirst(); 检查ID是否在给定列表中。

这是一个完整的工作示例:

Stream.flatMap()