Как получить объект из вложенного цикла с помощью stream?

112
14 октября 2021, 13:50

Есть xml:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <ns3:WSConsumerDictionaryInfoGetResponse xmlns:ns3="http://WSConsumerDictionaryInfo11" xmlns:ns2="http://WSCommonTypes10">
        <response>
            <outCommonParms>
                <outCommonParmsExt>
                    <name>logUID</name>
                    <value>1234</value>
                </outCommonParmsExt>
            </outCommonParms>
            <outParms>
                <dictionaries>
                    <dictionary>
                        <code>OKP-123</code>
                        <codeCategory>OKOPF</codeCategory>
                        <bCode>75203</bCode>
                        <name>test</name>
                        <note>BHPF</note>
                        <hasChildren>0</hasChildren>
                        <open>2018-04-07T07:32:44</open>
                        <close>9999-12-31T23:59:59</close>
                        <attributes>
                            <attribute>
                                <field>isPublicSectorEntity</field>
                                <value>1</value>
                                <open>0001-01-01T00:00:00</open>
                                <close>9999-12-31T23:59:59</close>
                            </attribute>
                        </attributes>
                    </dictionary>
                </dictionaries>
            </outParms>
        </response>
    </ns3:WSConsumerDictionaryInfoGetResponse>
</soapenv:Body>

Где есть список dictionaries в котором есть список attributes нужно найти attribute у которого

field = isPublicSectorEntity

и взять его все остальные значения (value, open, close)

Пытаюсь сделать это с помощью стрима:

wsConsumerDictionaryInfoGetOutParms.getDictionaries().getDictionary().stream()
                .filter(dictionary -> dictionary.getAttributes().getAttribute().stream()
                        .filter(attribute -> attribute.getField().equalsIgnoreCase(BUDGET_ORGANIZATION_FLAG))
                        .findFirst());

Но что то идет не так) Я примерно понимаю что но как исправить не могу понять.

Внутренним фильтром можно найти и взять нужный объект проверив field но вот как вернуть его ведь он находится во внутреннем цикле?

Хотелось бы как то вот так:

        String budgetFlag = "";
        for(WSConsumerDictionaryInfoDictionary r : wsConsumerDictionaryInfoGetOutParms.getDictionaries().getDictionary()){
            for(WSConsumerDictionaryInfoDictionaryAttribute t : r.getAttributes().getAttribute()){
                if(t.getField().equalsIgnoreCase(BUDGET_ORGANIZATION_FLAG)){
                    budgetFlag = t.getValue();            
                }
            }
        }
READ ALSO
Как проверить какой цвет на кнопках

Как проверить какой цвет на кнопках

На активности есть кнопки Оранжевого цвета, мне нужно все кнопки оранжевого цвета заменить на белыйПотому-что у меня есть другие кнопки,...

115
Проблемы с работой GenerationType.SEQUENCE

Проблемы с работой GenerationType.SEQUENCE

В базе данных есть последовательность seq2В своем классе-сущности назначил эту последовательность как генератор:

69
Как работает @JoinColumn

Как работает @JoinColumn

Видел много примеров, но все еще не совсем понимаю, в каких случаях пишется эта аннотацияВот допустим у нас сущности User и Book, между ними отношения...

220