मेरे पास 3 वर्ग हैं। अगर vifLineItemResponse.isSuccess() सत्य है तो मुझे PostProcessorRequest की आवश्यकता है। मैं PostProcessorRequest कैसे प्राप्त कर सकता हूं यदि इसकी एक नेस्टेड फ़ील्ड क्लास में स्थिति सत्य है।

public class PostProcessorRequest {
    FulfillmentResponse response;
    SalesOrderDocument orderDocument;
    //Getters and setters 
}

public class FulfillmentResponse {
    Collection<VifLineItemResponse> responses;
    //Getters and setters 
}

public class VifLineItemResponse {
    VifLineItem vifLineItem;
    boolean isSuccess;
    // Getters and setters 
}

जिस तरह से मैंने कोशिश की है

postProcessorRequest.getResponse()
                    .getResponses()
                    .stream()
                    .filter(match -> match.isSuccess())
                    .collect(Collectors.toList());

लेकिन मुझे केवल FulfillmentResponse ऑब्जेक्ट मिल रहा है। मैं postProcessorRequest कैसे प्राप्त कर सकता हूं?

0
VKP 27 मार्च 2020, 01:28

1 उत्तर

सबसे बढ़िया उत्तर

यह बिल्कुल स्पष्ट नहीं है कि क्या आपको यह जांचने की आवश्यकता है कि क्या कम से कम एक प्रतिक्रिया सफल है, या क्या वे सभी सफल हैं, लेकिन किसी भी तरह से, आप संभवतः लीफ ऑब्जेक्ट्स को स्ट्रीम करने के बजाय रूट ऑब्जेक्ट पर वैकल्पिक का उपयोग करना चाहते हैं:

Optional.of(postProcessorRequest)
        .filter(ppr->ppr.response!=null)
        .filter(ppr->ppr.response.responses.stream().anyMatch(VifLineItemResponse::isSuccess))
        .ifPresent(ppr-> {
            // ppr has at least one success response,
            // do with it whatever needs to be done
        })

अगर आप चाहते हैं कि सभी जवाब सही हों, तो anyMatch को allMatch में बदलें

या, आप अपनी कक्षाओं को द्वि-दिशात्मक संबंध बनाने के लिए बदल सकते हैं, यानी कुछ इस तरह:

public class PostProcessorRequest {
    FulfillmentResponse response;
    SalesOrderDocument orderDocument;
    //Getters and setters 
}

public class FulfillmentResponse {
    Collection<VifLineItemResponse> responses;
    PostProcessorRequest getRequest(){ /* points back to parent */ }
    //Getters and setters 
}

public class VifLineItemResponse {
    VifLineItem vifLineItem;
    PostProcessorRequest getFulfillmentResponse(){ /* points back to parent */ }
    boolean isSuccess;
    // Getters and setters 
}

अब हम आपका मूल कोड अनुकूलित कर सकते हैं:

postProcessorRequest.getResponse()
                    .getResponses()
                    .stream()
                    .filter(match -> match.isSuccess())
                    .map(VifLineItemResponse::getFulfillmentResponse)
                    .map(FulfillmentResponse::getRequest)
                    .distinct()
                    .collect(Collectors.toList());
1
Sean Patrick Floyd 26 मार्च 2020, 22:57