Как получить объекты из списка по данным с карты с условием и сохранить на другую карту с помощью Groovy - PullRequest
0 голосов
/ 22 сентября 2019

В поисках решения, как сопоставить объекты из списка с данными из карты с условием, если поле объекта начинается со значений карты и сохранить на другой карте с Groovy

У меня есть карта с некоторыми данными

Map<String, String> dataMap = new HashMap()
    dataMap.put("d1", "DATA1")
    dataMap.put("d2", "DATA2")
    dataMap.put("d3", "DATA3")

и список объектов DataElement

    List<DataElement> elements = new ArrayList()

elements.add(new DataElement("TEXT1"))
elements.add(new DataElement("TEXT2"))
elements.add(new DataElement("DATA1_text1"))
elements.add(new DataElement("DATA2_text2"))

class DataElement {
            public field;
    public DataElement(String text){
        this.field = text
    }

    public getField(){
        return this.field
    }

И я пытаюсь получить новую карту, где ключи - это значения с первой карты, а значения - это объекты (поле) из списка с условием, если поле объекта начинается с картызначение: Результат должен быть:

[d1=DATA1_text1, d2=DATA2_text2]  

Мой код работает, но может быть, есть более элегантный вариант с использованием collectEntries:

    list = new HashMap()

mapping = dataMap.each { key, v ->
    elements.each { el ->
        if (el.getField().startsWith(v)) {
            list.put(key, el)
        }
    }
    }

1 Ответ

1 голос
/ 22 сентября 2019
dataMap.collectEntries{k,v-> 
    [k,elements.find{e-> e.getField().startsWith(v)} ]
}.findAll{k,v-> v} //to keep only non empty values

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...