Как преобразовать список <NameValuePair>в список >? - PullRequest
2 голосов
/ 29 мая 2020

Я захватываю параметры из URL-адреса запроса, используя com.apache.http.NameValuePair, который в основном хранит эти параметры в List<NameValuePair>. Чтобы выполнить определенные проверки и проверки этих параметров, мне нужно преобразовать этот список в List<Map.Entry<String, String>>. Есть ли способ сделать это преобразование?

примерно так:

http://127.0.0.1: 9898 / v3 / {project_id} / eip / publicips? Fields = id & fields = owner

from Как преобразовать List в hashMap ?

Map<String, String> mapped = list.stream().collect(
        Collectors.toMap(NameValuePair::getName, NameValuePair::getValue));

У меня это не работает. потому что там много полей ключ.

Ответы [ 2 ]

4 голосов
/ 29 мая 2020

Вы можете преобразовать каждую NameValuePair в Map.Entry , а затем собрать их в List

List<Map.Entry<String, String>> entries = list.stream()
                                              .map(n->new AbstractMap.SimpleEntry<String, String>(n.getName(), n.getValue())
                                              .collect(Collectors.toList());
0 голосов
/ 29 мая 2020

Вероятно, вы напутали что-то еще, чего нет в отрывке кода. Я попытался воспроизвести ваш случай, и он работает в моей настройке.


public class Main {

    public static void main(String[] args) {
        List<NameValuePair> list = new ArrayList<>();
        MyNameValuePair myNameValuePair = new MyNameValuePair();
        myNameValuePair.setKvKey("i");
        list.add(myNameValuePair);
        myNameValuePair = new MyNameValuePair();
        myNameValuePair.setKvKey("j");
        list.add(myNameValuePair);
        myNameValuePair = new MyNameValuePair();
        myNameValuePair.setKvKey("k");
        list.add(myNameValuePair);
        Map<String, String> mapped = new HashMap<>();
        mapped = list.stream().collect(
                Collectors.toMap(NameValuePair::getName, NameValuePair::getValue));

        System.out.println(mapped);
    }
}

class MyNameValuePair implements NameValuePair {
    private String kvKey;
    public void setKvKey(String kvKey){
        this.kvKey = kvKey;
    }

    @Override
    public String getName() {
        return kvKey;
    }

    @Override
    public String getValue() {
        return "val";
    }
}
...