java怎么把一个list 转换成可变数量参数传入

在 Java 中,如果你有一个 List<T>,并且需要把它传给一个方法的可变参数(varargs) ,可以通过 toArray 来实现。关键点是:可变参数在底层就是一个数组。

import java.util.List;

import java.util.ArrayList;

public class VarargsExample {

public static void main(String\[\] args) {

// 假设我们有一个List<String>

List<String> list = new ArrayList<>();

list.add("A");

list.add("B");

list.add("C");

**//调用一个接受可变参数的方法

printStrings(list.toArray(new String0));

}

*//*可变参数方法

public static void printStrings(String... strings) {

for (String s : strings) {

System.out.println(s);

}

}

}

关键点说明

  • list.toArray(new String0) 会返回一个 String\[\],这是可变参数的底层类型。
  • 如果你的方法是 children(DslTestPlanChild... children),而你有 List<DslTestPlanChild>,可以这样:

children(list.toArray(new DslTestPlanChild0))

总结

  • List → Array → Varargs 是标准做法。
  • new T0 是惯用写法,JVM 会自动分配正确大小的数组。
java 复制代码
package com.example.dsl.runner;

import com.example.dsl.model.Step;
import com.example.dsl.curl.CurlParser;
import com.example.dsl.model.ParsedCurl;
import static us.abstracta.jmeter.javadsl.JmeterDsl.*;
import us.abstracta.jmeter.javadsl.core.controllers.DslTransactionController;
import us.abstracta.jmeter.javadsl.core.threadgroups.DslDefaultThreadGroup;
import us.abstracta.jmeter.javadsl.http.*;
import java.nio.file.*;
import java.util.*;

public class CsvStepRunner {

    public static List<Step> loadCsv(String csvPath) {
        List<Step> list = new ArrayList<>();
        try {
            List<String> lines = Files.readAllLines(Paths.get(csvPath));
            lines.remove(0);
            for (String l : lines) {
                String[] p = l.split(",");
                Step s = new Step();
                s.type = p[0];
                s.curl = p[1];
                s.extractPath = p.length>2 ? p[2] : "";
                s.extractVar = p.length>3 ? p[3] : "";
                s.assertPath = p.length>4 ? p[4] : "";
                s.assertExpected = p.length>5 ? p[5] : "";
                list.add(s);
            }
        } catch (Exception e) { throw new RuntimeException(e); }
        return list;
    }

    public static DslDefaultThreadGroup buildPlanFromCsv(String csvPath) {
        List<Step> steps = loadCsv(csvPath);
        List<DslHttpSampler> samplers = new ArrayList<>();

        for (Step s : steps) {
            ParsedCurl pc = CurlParser.parse(s.curl);
            DslHttpSampler sampler = httpSampler(pc.url).method(pc.method);
            pc.headers.forEach(sampler::header);
            if (pc.body != null) sampler.body(pc.body);

            if (s.extractPath != null && !s.extractPath.isEmpty()) {
                sampler.children(jsonExtractor(s.extractVar, s.extractPath));
            }
            if (s.assertPath != null && !s.assertPath.isEmpty()) {
                sampler.children(jsonAssertion(s.assertPath).matches(s.assertExpected));
            }
            samplers.add(sampler);
        }

        System.out.println(samplers.toString().getClass());
        DslTransactionController t = transaction("my tr", samplers.toArray(new DslHttpSampler[0]));

        return  threadGroup(1, 1,  transaction("", t)).children(
                        jsr223PostProcessor(c ->System.out.println(c.prevMap())),
                        jsr223PostProcessor(c ->System.out.println(c.prevRequest())),
                        jsr223PostProcessor(c ->System.out.println(c.prevResponse()))
        );
    }

}
 
相关推荐
夜雪一千8 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
能有时光8 小时前
PyTorch KernelAgent 源码解读 ---(4)--- ExtractorAgent
人工智能·pytorch·python
_Jimmy_9 小时前
Python 协程库如何使用以及有哪些使用场景
python
aqi009 小时前
15天学会AI应用开发(十七)使用LangGraph实现会话记忆功能
人工智能·python·大模型·ai编程·ai应用
西门吹-禅9 小时前
java springboot N+1问题
java·开发语言·spring boot
第一程序员9 小时前
Rust Agent 子进程执行:Command 之前,先定义输入和超时
python·rust·github
skywalk81639 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
weixin_BYSJ198710 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
IT笔记11 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode11 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn