плоская разделенная строка с Java 8 Stream - PullRequest
0 голосов
/ 29 мая 2018

Как следующая строка может быть сопоставлена ​​с картой

ввод: Garagen / Stellplätze / Other 1/2/1

вывод: Карта=>

Garagen->1
Stellplätze->2
Other->1

есть идеи?

Я пытался

Pattern.compile("\\s* \\s*") //split by space
    .splitAsStream(responseString.trim())
    .map(s -> s.split("/", 2))
    .collect(Collectors.toMap(a -> a[0], a -> a.length>1? a[1]: ""));

, но получаю другой вывод

1 Ответ

0 голосов
/ 29 мая 2018

Разделить на пробел.Затем вы разделили ключи и значения.Затем разделить на разделитель /.После этого настройте карту и соберите:

String input = ...
String[] data = input.split(" ");
String[] keys = data[0].split("/");
String[] values = data[1].split("/");

Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < keys.length; i++) {
    map.put(keys[i], Integer.valueOf(values[i]));
}

Использование Stream API здесь, вероятно, будет довольно сложным и нечитаемым.Проблема в том, что значения следуют после ключей, и не так просто чередовать подпотоки.Таким образом, вам будет нелегко объединить ключи с соответствующими им значениями.

Ваш нынешний подход имеет именно эту проблему:

Arrays.stream(input.split(" "))   // Stream<String>
    .map(data -> data.split("/")) // Stream<String[]> : [keys, values]
    ... // How to group keys[i] with values[i]?

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

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