我在相当长的一段时间内一直在解决此过滤问题。希望能对此有所帮助。
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();
但是我无法正确映射它。
答案 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()