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()))
        );
    }

}
 
相关推荐
_一路向北_6 小时前
爬虫框架:Feapder使用心得
爬虫·python
皇族崛起6 小时前
【3D标注】- Unreal Engine 5.7 与 Python 交互基础
python·3d·ue5
真上帝的左手6 小时前
18. 操作系统-Windows-命令提示符
windows
你想知道什么?6 小时前
Python基础篇(上) 学习笔记
笔记·python·学习
曼巴UE56 小时前
UE5 C++ 动态多播
java·开发语言
steins_甲乙7 小时前
C++并发编程(3)——资源竞争下的安全栈
开发语言·c++·安全
Swizard7 小时前
速度与激情:Android Python + CameraX 零拷贝实时推理指南
android·python·ai·移动开发
一直跑7 小时前
Liunx服务器centos7离线升级内核(Liunx服务器centos7.9离线/升级系统内核)
python
leocoder7 小时前
大模型基础概念入门 + 代码实战(实现一个多轮会话机器人)
前端·人工智能·python
Buxxxxxx7 小时前
DAY 37 深入理解SHAP图
python