如何将两个单独的列表添加到二维数组?

时间:2019-11-03 10:42:11

标签: java

我有2个列表,我想按特定顺序将数据添加到2维数组中,以成功在JTable中显示数据。 这就是我初始化JTable的方式:table = new JTable(data, columnNames); 数据变量是二维数组,columnNames是固定的,不能考虑。

我从地图中为键添加了两个单独列表中的值:

List<String> keyWords = new ArrayList<String>();
List<Long> valueFrequency = new ArrayList<Long>();
for (Map.Entry<String,Long> entry : counts.entrySet()) 
{
    keyWords.add(entry.getKey());
    valueFrequency.add(entry.getValue());
}

这按预期工作!

现在数据变量应如下所示(示例) Object[][] data = {{"James", 3}, {"Hello", 2}};。当我像这样进行硬编码时,这些元素将按预期在Jtable中显示。 现在,我要动态地通过添加列表keyWords的第一个元素(在我们的例子中为“ James”)和列表valueFrequency的第一个元素(在我们的例子中为3)中添加数字来动态地实现相同的效果。现在,在“ Hello”位置添加列表关键字的第二个元素,在数字2位置添加列表velueFrequency的第二个元素,依此类推。两个列表的大小始终相同。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  1. 从地图上

    • 使用Stream

      Object[][] data = counts.entrySet()
                              .stream().map(e -> new Object[]{e.getKey(),e.getValue()})
                              .toArray(Object[][]::new);
      
    • 使用for-i循环

      Object[][] data = new Object[counts.size()][];
      int i = 0;
      for (Map.Entry<String, Long> entry : counts.entrySet()) {
          data[i++] = new Object[]{entry.getKey(), entry.getValue()};
      }
      
  2. 在两个列表中:

    • 使用Stream

      Object[][] data = IntStream.range(0, keyWords.size())
                     .mapToObj(i -> new Object[]{keyWords.get(i), valueFrequency.get(i)})
                     .toArray(Object[][]::new);
      
    • 使用Guava Streams

      Object[][] data = Streams.zip(keyWords.stream(), valueFrequency.stream(), (s, l) -> new Object[]{s, l})
                               .toArray(Object[][]::new);
      
    • 使用for-i循环

      Object[][] data = new Object[keyWords.size()][];
      for (int i = 0; i < keyWords.size(); i++) {
          data[i] = new Object[]{keyWords.get(i), valueFrequency.get(i)};
      }