繁体   English   中英

Java Parallel Stream AnyMatch of Parallel Stream 的一个字段

[英]Java Parallel Stream AnyMatch of Parallel Stream's one field

我是 Java 的新手,但我想使用 Parallel Streams 而不是 For 语句。 所以我有一个 ArrayList 的 pojo object 如下所示,并尝试检查一个 object 和第二个 ZA8CFDE63311C49EB2AC96F866 的字段

List<DataOne> dol = new ArrayList<>();
/// dol.add(new DataOne("fieldA", "fieldB", "fieldC")); ...

List<DataTwo> dtl = new ArrayList<>();
/// dol.add(new DataTwo("field1", "field2", "field3")); ...

boolean cc = dol.parallelStream()
    .filter(Objects::nonNull)
    .filter(a ->  a.getFieldA() != null && a.getFieldB() != null && a.getFieldC() != null)
    .anyMatch(a -> 
         dtl.parallelStream()
         .filter(Objects::notNull)
         .filter(b -> b.getField1 != null && b.getField2 != null && b.getField3 != null)
         .anyMatch(b -> b.getField1.contains(a.getFieldA)));

但它不工作......我做错了什么?

您正在使用 contains() 方法来查找匹配的字段。 DataTwo.getField1().contains(DataOne.getFieldA()) ---> "field1".contains("fieldA") --> 返回“false”,因为“field1”不包含任何“fieldA”。 但如果 DataTwo.field1 类似于“fieldAekstra”,那么 DataTwo.getField1().contains(DataOne.getFieldA()) --> 将返回 true,因为“fieldAekstra”包含一个“fieldA”。

下面的示例运行正确并输出“找到匹配”。 我只是纠正了一些错别字。 总体而言,您的代码正在运行,只是示例列表项中没有匹配的字符串。

List<DataOne> dol = new ArrayList<>();
     dol.add(new DataOne("fieldA", "fieldB", "fieldC")); 
     dol.add(new DataOne("fieldD", "fieldF", "fieldH"));
     dol.add(new DataOne("fieldK", "fieldM", "fieldN"));
    List<DataTwo> dtl = new ArrayList<>();
    dtl.add(new DataTwo("fieldAEkstra", "fieldBEkstra", "fieldCEkstra")); 
    dtl.add(new DataTwo("fieldDEkstra", "fieldFEkstra", "fieldHEkstra"));
    dtl.add(new DataTwo("fieldTEkstra", "fieldOEkstra", "fieldWEkstra"));
    /*dtl.add(new DataTwo("field1", "field2", "field3")); 
    dtl.add(new DataTwo("field4", "field5", "field6")); 
    dtl.add(new DataTwo("field7", "field8", "field9")); */
    boolean cc = dol.parallelStream()
            .filter(Objects::nonNull)
            .filter(a ->  a.getFieldA() != null && a.getFieldB() != null && a.getFieldC() != null)
            .anyMatch(a -> 
                 dtl.parallelStream()
                 .filter(Objects::nonNull)
                 .filter(b -> b.getField1() != null && b.getField2() != null && b.getField3() != null)
                 .anyMatch(b -> b.getField1().contains(a.getFieldA())));
    if(cc)
        System.out.println("Match found!");
    else
        System.out.println("No Match !");

Output:

Match found!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM