【问题标题】:Iterating list of map for writing only its content迭代地图列表以仅写入其内容
【发布时间】:2020-09-14 06:12:12
【问题描述】:

每个参与者都在给彼此投票一些数值,我想用代理人的名字写这个信息。

通过以下代码,

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 x 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 braket 呢?这将是完美的..

【问题讨论】:

  • 请问cj.makingDefault()的类型是什么?
  • 它返回 List>>......
  • 试试a.values()。它返回一个您可以根据需要打印的集合
  • @user7,我使用 getValue 仅提取数字..但仍然存在问题..
  • 你能分享更多的输入和输出作为例子吗?例如,查看 ji、yoo、mi 的值将去哪里。每个地图确实只有一个条目?

标签: java loops dictionary set


【解决方案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】:

    您必须首先迭代映射值(即列表),然后迭代这些列表中的项目以覆盖标准 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"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2014-02-22
      • 2019-08-16
      • 1970-01-01
      相关资源
      最近更新 更多