Java 将 ArrayList 转换为二维数组

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2146488/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 04:07:01  来源:igfitidea点击:

Converting an ArrayList into a 2D Array

javaarraysarraylist

提问by Anto

In Java how do you convert a ArrayList into a two dimensional array Object[][]?

在 Java 中,如何将 ArrayList 转换为二维数组 Object[][]?

From comments: I will describe you the problem with more details: an XML file includes a list of contacts (e.g. name, address...). The only way I can obtain this information is through an ArrayList, which will be given to me. As I need to store the content of this array list in a Java Swing table in an ordered manner, I was thinking to convert it into a two dimensional array of objects

来自评论:我将用更多细节向您描述问题:一个 XML 文件包括一个联系人列表(例如姓名、地址...)。我能获得这些信息的唯一方法是通过一个 ArrayList,它将提供给我。由于我需要以有序的方式将此数组列表的内容存储在 Java Swing 表中,因此我想将其转换为对象的二维数组

采纳答案by Anto

I managed to find "a way" to do so, knowing the number of attributes each contacts has (6). So considering an ArrayList listofContacts

我设法找到了这样做的“方法”,知道每个联系人具有的属性数量(6)。所以考虑一个ArrayList listofContacts

    int numberOfContacts = listofContacts.size()/6;
    Object[][] newArrayContent = new Object[numberOfContacts][6];

    for(int x = 0; x<numberOfContacts; x++){
        for(int z = 0; z < 6; z++){
        int y = 6 * x;
        newArrayContent [x][z] = list.get(y+z); 
        System.out.println(newArrayContent [x][z].toString());
        }
    }

回答by Carlos Tasada

What you really want is to sort the ArrayList. To do that your Contacts class must implement a Comparator method.

您真正想要的是对 ArrayList 进行排序。为此,您的 Contacts 类必须实现 Comparator 方法。

Check the next page for an example: http://www.java-examples.com/sort-java-arraylist-descending-order-using-comparator-example

检查下一页以获取示例:http: //www.java-examples.com/sort-java-arraylist-descending-order-using-comparator-example

回答by Ravi Gupta

I will recommend that you parse your XML into java objects and store the object in a custom data object. This will make it easier for you to do many operations on the available data.

我建议您将 XML 解析为 java 对象并将该对象存储在自定义数据对象中。这将使您更容易对可用数据进行许多操作。

Hereis small tutorial on how to do it.

是有关如何操作的小教程。

回答by Stephen C

The simple way is to add a method to the Contactlike this:

简单的方法是添加一个方法,Contact如下所示:

public Object[] toObjectArray() {
    return new Object[] { getName(), getAddress, /* ... */ };
}

and use it like this:

并像这样使用它:

ArrayList<Contact> contacts = /* ... */
Object[][] table = new Object[contacts.size()][];
for (int i = 0; i < contacts.size(); i++) {
    table[i] = contacts.get(i).toObjectArray();
}

回答by Adam Paynter

I presume you are using the JTable(Object[][], Object[])constructor.

我假设您正在使用JTable(Object[][], Object[])构造函数。

Instead of converting an ArrayList<Contact>into an Object[][], try using the JTable(TableModel)constructor. You can write a custom class that implements the TableModelinterface. Sun has already provided the AbstractTableModelclass for you to extend to make your life a little easier.

不要将 an 转换ArrayList<Contact>为 an Object[][],而是尝试使用JTable(TableModel)构造函数。您可以编写一个实现该TableModel接口的自定义类。Sun 已经提供了AbstractTableModel课程供您扩展,让您的生活更轻松。

public class ContactTableModel extends AbstractTableModel {

    private List<Contact> contacts;

    public ContactTableModel(List<Contact> contacts) {
        this.contacts = contacts;
    }

    public int getColumnCount() {
        // return however many columns you want
    }

    public int getRowCount() {
        return contacts.size();
    }

    public String getColumnName(int columnIndex) {
        switch (columnIndex) {
        case 0: return "Name";
        case 1: return "Age";
        case 2: return "Telephone";
        // ...
        }
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Contact contact = contacts.get(rowIndex);

        switch (columnIndex) {
        case 0: return contact.getName();
        case 1: return contact.getAge();
        case 2: return contact.getTelephone();
        // ...
        }
    }

}

Later on...

稍后的...

List<Contact> contacts = ...;
TableModel tableModel = new ContactTableModel(contacts);
JTable table = new JTable(tableModel);

回答by peng

Try this:

尝试这个:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(..);
list.add(..);
list.add(..);
list.add(..);
list.add(..);
list.add(..);
int[][] a = new int[list.size()][list.size()];
    for(int i =0; i < list.size(); i++){
      for(int j =0; j <list.size(); j++){
        a[i][j]= list.get(j +( list.size() * i));
      }
  }

回答by Jerry Lamola

public static String[][] convertListIntoArrayObj(List<TeamMenuSelected> possibilities) {
    int numberOfColums = 2;
    int numberOfRows = possibilities.size();
    String[][] values = new String[numberOfRows][numberOfColums];

    for(int x=0; x<possibilities.size(); x++) {
        TeamMenuSelected item = possibilities.get(x);
        values[x][0] = item.getTeamName();
        values[x][1] = item.getTeamCuisine();
    }

    return values;
}

回答by Iyush

 ArrayList<String> arrayList = new ArrayList<String>();
    arrayList.add("element_1");
    arrayList.add("element_2");
    arrayList.add("element_3");
    arrayList.add("element_4");
    int k=0;
    int row = 2, col = 2;
    Object[][] objArray = new Object[row][col];
     for(int i = 0 ; i < row; i++) {
         for(int j = 0; j < col; j++) {
                 objArray[i][j] = arrayList.get(k);
                 k++;
                 if(k > arrayList.size()) {
                     break;
                 }
         }
     }
     for(int i = 0 ; i < row; i++) {
         for(int j = 0; j < col; j++) {

             System.out.println("Row no "+i+" col no "+j+" "+objArray[i][j] );
         }
  }
 }