将字符串数组设置为 jtable 列名并将 Apache poi excel 数据设置为 JTable

set String array to jtable column names & Apache poi excel data to JTable

 jTable1.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null},
        {null, null, null},
          },
    new String [] {
        class2.columnName[0],class2.columnName[1],class2.columnName[2]                    
    }
));

列名数组在 class2 中:

static String[] columnName={"Name", "data" , "data2"};

我想在 JTableJTable 中从 String[]String[] 列设置 3 个列名称。我通过硬编码使用数组索引号来做到这一点: 但是如果我在数组中有数百个值那么我如何通过使用数组值而不使用硬编码数组索引号而是使用任何其他更少键入的方式来设置 jtable 列名称

new String[]{Writesheet.Columns[0], Writesheet.Columns[1], Writesheet.Columns[2]}

可以替换为对数组的引用

Writesheet.Columns

同时

{Readsheet.Stringvalue, Readsheet.Stringvalue, Readsheet.Stringvalue}

可以替换为

Stream.generate(() -> Readsheet.Stringvalue).limit(3).toArray(String[]::new)

可以归纳为一个方法

public static <T> T[] generateArrayFromElement(T element, int size, IntFunction<T[]> arrayGeneratorFunction) {
    return Stream.generate(() -> element)
                 .limit(size)
                 .toArray(arrayGeneratorFunction);
}
...
generateArrayFromElement(Readsheet.Stringvalue, 3, String[]::new);

(我们生成单个元素的无限流,限制到需要的大小,收集到数组中)

public static <T> T[] generateArrayFromElement2(T element, T[] array) {
    Arrays.fill(array, element);
    return array;
}
...
generateArrayFromElement2(Readsheet.Stringvalue, new String[3]);

(我们用单个元素填充给定的数组并 return 它)

如果数组从未被修改过 并且你想使用整个数组,那么你可以使用数组引用直接:

jTable1.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {Readsheet.Stringvalue, Readsheet.Stringvalue, Readsheet.Stringvalue},
        {Readsheet.Stringvalue, Readsheet.Stringvalue, Readsheet.Stringvalue},

    },
    Writesheet.Columns // <-- Array reference
));

如果数组可以修改,您可以创建一个整个数组的副本There are many ways to do it,我个人的喜好是Arrays.copyOf

    Arrays.copyOf(Writesheet.Columns, Writesheet.Columns.length) // <-- Copy of the entire array

如果您只需要数组的 连续部分, 您可以创建 array slice:

的副本
    Arrays.copyOfRange(Writesheet.Columns, 0, 3) // <-- Copy of a part of the array, indexes from 0 to 2

最后,如果您需要通过单独的非连续索引提取元素并且不想多次输入Writesheet.Columns[...],您可以使用索引流并使用Stream.map()提取值:

    IntStream.of(0, 1, 2) // <-- Indexes here
        .mapToObj(i -> Writesheet.Columns[i]).toArray()

更新: 使用 , 作为分隔符将结果数组连接到字符串:

    IntStream.of(0, 1, 2) // <-- Indexes here
        .mapToObj(i -> Writesheet.Columns[i]).collect(Collectors.joining(","))