Повторяющийся список карты для записи только ее содержимого

#java #loops #dictionary #set

#java #циклы #словарь #установить

Вопрос:

Каждый участник присваивает некоторые числовые значения друг другу, и я хочу записать эту информацию по имени агента.

С помощью следующего кода,

 cj.makingDefault().stream()
       .forEach(a->out.print(a.entrySet()));
  

Я получаю список напечатанных карт, который,

 [ari=[0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03], 
 hyo=[0.31, 0.31, 0.317, 0.31..., ji=[...], yoo=[...], mi=[...]..]
  

Как я могу распечатать только числовое значение по агентам, разделенное символом новой строки?

Желаемые результаты были бы такими

 0.3, 0.3, 0.3, ...0.3
0.31, 0.31, 0.31, ...0.31,
...
  

Если бы было 7 участников, матрица 7 на 7.

Заранее благодарю вас за вашу помощь ~

редактировать) В качестве временного решения я модифицировал функцию «cj.makingDefault()», чтобы возвращать только Map<Строка, список> и изменил код на это.

   cj.makingDefault().entrySet()
    .stream().forEach(a->out.print(a.getValue() "n"));
  

и я получил

 [0.0056009042654552865, 0.0056009042654552865, 0.0056009042654552865, 0.0056009042654552865, 0.0056009042654552865, 0.0056009042654552865, 0.0056009042654552865]
[0.31583809304895144, 0.31583809304895144, 0.31583809304895144, 0.31583809304895144, 0.31583809304895144, 0.31583809304895144, 0.31583809304895144]
[0.9924090841607273, 0.9924090841607273, 0.9924090841607273, 0.9924090841607273, 0.9924090841607273, 0.9924090841607273, 0.9924090841607273]
[0.8093898651356558, 0.8093898651356558, 0.8093898651356558, 0.8093898651356558, 0.8093898651356558, 0.8093898651356558, 0.8093898651356558]
[0.015200181208559038, 0.015200181208559038, 0.015200181208559038, 0.015200181208559038, 0.015200181208559038, 0.015200181208559038, 0.015200181208559038]
[0.03947825506938696, 0.03947825506938696, 0.03947825506938696, 0.03947825506938696, 0.03947825506938696, 0.03947825506938696, 0.03947825506938696]
[0.39173806385104337, 0.39173806385104337, 0.39173806385104337, 0.39173806385104337, 0.39173806385104337, 0.39173806385104337, 0.39173806385104337]
  

Тогда как я могу устранить ошибку suqare этого ..? это было бы идеально..

Комментарии:

1. Какой тип cj.makingDefault() пожалуйста?

2. он возвращает список<Карта<Строка, список<Двойной>>>……

3. Попробуйте a.values() . Он возвращает коллекцию, которую вы можете распечатать по желанию

4. @user7, я использовал GetValue для извлечения только числа .. но все еще есть проблема..

5. Можете ли вы поделиться большим количеством входных и выходных данных в качестве примера? Чтобы увидеть, например, куда пойдут значения ji, yoo, mi. у каждой карты есть только одна запись?

Ответ №1:

То, что вы видите, является toString реализацией коллекции по умолчанию, которая будет включать квадратные скобки.

Вы должны распечатать элементы в списке самостоятельно.

 cj.makingDefault().stream()
   .forEach(a -> print(a.values()));

 private void print(Collection<Double> values) {
    System.out.println(values.stream()
            .map(String::valueOf)
            .collect(Collectors.joining(",")));
}
  

Ответ №2:

Вы должны сначала выполнить итерацию значений map, которые являются списками, а затем элементов в этих списках, чтобы переопределить стандартный вывод toString.

 Map<String, List<Double>> map = ...

String result = map.values().stream()
        .map(s -> s.stream()
                .map(String::valueOf)
                .collect(Collectors.joining(", ")))
        .collect(Collectors.joining("n"));