public class OrdersDto implements java.io.Serializable {
    /** Id **/
    private Long screening;
    private Long category;
    private TestMastDto testMast;
    /** getters & setters/ constructor */
}

public class TestMastDto implements java.io.Serializable {
    /** Id **/
    private Long testId;
    /** getters & setters/ constructor */
}


还有另一种POJO格式

public class ReviewMedicalConfigDto implements Serializable {
    /** Id **/
    private Long jobCategoryId;
    private Long screeningTypeId;
    private Long testId;
}


我有一个List<OrdersDto> and a List<ReviewMedicalConfigDto>,如何使用Java流或Java中的其他任何有效方式比较不同类型列表中的testId,screeningTypeId,jobCategoryId

仅对给出类强制转换异常的testId进行了尝试

 boolean isConfigTest = orders.stream().map(orObj -> orObj.getTestMast().getTestId())
                     .collect(Collectors.toList()).equals(reviewMedicalConfigDtos.stream().map( rmObj -> rmObj.getTestId() ));


异常java.lang.ClassCastException:om.gov.moh.services.dto.ReviewMedicalStatusDto无法转换为om.gov.moh.services.dto.OrdersDto

最佳答案

一般模式是

boolean match = list1.size() == list2.size() &&
    IntStream.range(0, list1.size()).allMatch( index -> {
        FirstType  a = list1.get(index);
        SecondType b = list2.get(index);
        return Objects.equals(a.getProperty1(), b.getProperty1())
            && Objects.equals(a.getProperty2(), b.getProperty2())
            && Objects.equals(a.getProperty3(), b.getProperty3());
    });


尽管普通的循环可能更简单。

对于基本类型的属性,您可以将Objects.equals(a.getPropertyX(), b.getPropertyX())替换为a.getPropertyX() == b.getPropertyX()

09-07 15:06