将List转换为二维数组Java for TestNG数据提供程序



如果您正在使用TestNG,您会发现要将方法用作数据提供程序,您必须创建一个返回二维Object数组的方法。

所以,如果我有一个学生列表,有没有什么实用的方法可以把它转换成二维数组。

我不是希望使用类似的循环手动转换它

 List<Student> studentList = getStudentList();
 Object [][] objArray = new Object[studentList.size][];
 for(int i=0;i< studentList.size();i++){
    objArray[i] = new Object[1];
    objArray[i][0] = studentList.get(i);
 } 
 return objArray;

相反,我正在查看一个实用程序函数(如果在任何库中都有)。

或者为TestNG 编写数据提供程序方法的更好方法

使用Java 8流(并使用关于将流转换为数组的问题):

@DataProvider
public Object[][] studentProvider() {
    return studentList.stream()
        .map(student -> new Object[] { student })
        .toArray(Object[][]::new);
}

所以。。。让stackoverflow称我为风滚草。。。但答案是这样的。

List<Student> studentList = getStudentList();
 Object [][] objArray = new Object[studentList.size][];
 for(int i=0;i< studentList.size();i++){
    objArray[i] = new Object[1];
    objArray[i][0] = studentList.get(i);
 } 
 return objArray

这并不能直接回答您的问题。但你也可以像这个一样解决这个问题

  @DataProvider
  public Iterator<Object[]> studentProvider() {
    List<Student> students = getStudentList();
    Collection<Object[]> data = new ArrayList<Object[]>();
    students.forEach(item -> data.add(new Object[]{item}));
    return data.iterator();
  }

IT也在一维数组中为我工作,我在testng数据提供程序中将列表转换为一维数组,可能对有用

 @DataProvider(name =  "Passing  List  Of Maps")
  public Object[]  createDataforTest3(){
   TestDataReader  testDataReader   =  new TestDataReader();
    List<String>  caselDs     =  new ArrayList<String>();
    caselDs    =             testDataReader.getValueForThekeyFromTestDataDirectory("testdate,"XYZ");
    Object[]  data      =       new String[caseIDs.size()];
    for (int  i=0;i<caseIDs.size()-1;i++)             {
   data[i]=  caselDs.get(i);
    return  data;}

  @Test(dataProvider =  "Passing  List  Of Maps",description=  "abc")
  public void  test(String value)         {
       System.out.println("Value  in  first  Map:"   + value);
     }

最新更新