#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"));