java - Java如何在变量参数数组的开头添加插入元素?
问题描述
我有一个带有字符串列表参数的函数,我想在这个字符串列表参数的开头插入元素,以便我可以将它作为参数传递给其他函数,现在当我尝试添加 ArrayList 但 argArr 没有这样的方法时。 .
ArrayList.add(0,"foo");
private void A(String... argsArr)
{
//insert element at beginning
B(argArr);
}
private void B(String... argsArr)
{
}
解决方案
如果要使用可变参数数组,可以创建一个插入元素的新数组。例如,使用流:
private void a(String... argsArr) {
String[] args2 = Stream.concat(Stream.of("foo"), Arrays.stream(args))
.toArray(String[]::new);
b( args2 );
}
如果您愿意,可以创建一个没有流的新数组。这是使用临时列表的简单方法。
private void a(String... argsArr) {
List<String> newList = new ArrayList<>();
newList.add("foo");
newList.addAll(Arrays.asList(argsArr));
b(newList.toArray(new String[newList.size()]));
}
如果您不需要可变参数数组,则可以使用 List<> 参数。将新元素插入到不同的列表中是一种很好的形式。调用者可能会提供一个不可修改的列表,或者可能不想修改它的列表。
private void a2( List<String> args ) {
List<String> newList = new ArrayList<>( args );
newList.add(0, "foo"); // <-- Extra O(n) time to shift elements over.
b( newList );
}
您可以通过不在现有列表的开头插入来提高效率。
private void a2( List<String> args ) {
List<String> newList = new ArrayList<>( );
newList.add("foo");
newList.addAll( args );
b( newList );
}
推荐阅读
- javascript - 测试 Lambda 函数时 index.handler 未定义或未导出
- python - 在 jinja-flask 框架中发布 json 数据
- jquery - 未选择选项并且不会清除错误时,Jquery 验证进行验证
- typescript - 将 pg-promise 任务与 graphql 和 dataloader 一起使用
- python - 如何根据用户组为字段设置odoo域过滤器?
- cucumber - 运行链式分离的黄瓜文件
- firebase - 如何在 Firestore 中编写以下规则?
- forms - 如何在 Orbeon 表单中验证文件类型
- java - Camel-K 不识别本地包
- c# - XAML 组合框的 DataContext 不起作用