如何仅将列表的值作为 Java 中的参数传递

How to pass just the values of a list as arguments in Java

我有一个要求,需要将列表项作为参数传递给库函数。此函数接收参数 String[] args。所以像 myFunc(list[0], list[1], list[2]...) 这样的东西。有没有办法只提取列表的项目并传递它们?

细节:

代码:

CsvSchema schema = csvMapper.typedSchemaFor(PersonDetailsCSVTemplate.class) 
.withHeader() 
.sortedBy("personNameHeader", "personAgeHeader",...) 
.withColumnSeparator(',') 
.withComments();

这里的 sortedBy 函数需要多个字符串作为参数,它将根据这些字符串进行排序,虽然我有一个从 csv header 行收到的字符串列表,但我不确定如何单独传递它们。

您可以使用 Java 11 中添加的 toArray(IntFunction<T[]> generator) 方法将 List<String> 转换为 String[]

String[] strings = list.toArray(String[]::new);

或直接传递:

CsvSchema schema = csvMapper.typedSchemaFor(PersonDetailsCSVTemplate.class)
    .withHeader()
    .sortedBy(list.toArray(String[]::new))
    .withColumnSeparator(',')
    .withComments();

在 Java 8 上,使用接受数组的 toArray 的重载:

CsvSchema schema = csvMapper.typedSchemaFor(PersonDetailsCSVTemplate.class)
    .withHeader()
    .sortedBy(list.toArray(new String[list.size()]))
    .withColumnSeparator(',')
    .withComments();

或:

CsvSchema schema = csvMapper.typedSchemaFor(PersonDetailsCSVTemplate.class)
    .withHeader()
    .sortedBy(list.toArray(new String[0]))
    .withColumnSeparator(',')
    .withComments();

如果数组太小,它会根据您传入的数组的元素类型创建一个必要的大小。这就是为什么传入 zero-length 数组会起作用的原因。

你的意思是你需要的函数只接受 String[] 类型作为参数并且你有项目列表并且你想传递这个项目列表函数,这是你需要的?如果是这样你可以使用接口列表 toArray();方法例如:

List<String> list = Arrays.asList("A", "B", "C");
String[] array = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(array));