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 String[0]));

}

*//*可变参数方法

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

for (String s : strings) {

System.out.println(s);

}

}

}

关键点说明

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

children(list.toArray(new DslTestPlanChild[0]))

总结

  • List → Array → Varargs 是标准做法。
  • new T[0] 是惯用写法,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()))
        );
    }

}
 
相关推荐
无限进步_32 分钟前
二叉搜索树完全解析:从概念到实现与应用场景
c语言·开发语言·数据结构·c++·算法·github·visual studio
努力努力再努力FFF36 分钟前
别再乱学PS、Python了,普通大学生该看懂的技能趋势
开发语言·python
呆萌的代Ma1 小时前
docker内的n8n配置Code节点运行python代码
python·docker·容器
天若有情6731 小时前
逆向玩家狂喜!用C++野生写法一键破解线性加密(不规范但巨好用)
开发语言·c++·算法
XiYang-DING1 小时前
JavaScript
开发语言·javascript·ecmascript
skywalk81631 小时前
代码高尔夫(Code Golf)是一种以“用最少的字符数实现特定功能”为核心目标的编程挑战或风格。
开发语言
xyq20241 小时前
MySQL 安装配置
开发语言
鸽子一号1 小时前
c#Modbus通信
开发语言·c#
南汁bbj2 小时前
彻底解决!Milvus远程连接报错code=2、gRPC超时问题(Windows访问Linux服务终极方案)
linux·windows·milvus
念何架构之路2 小时前
Go Socket编程
开发语言·后端·golang