简体   繁体   English

将ArrayList转换为2D数组

[英]Converting an ArrayList into a 2D Array

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 (eg name, address...). 来自评论:我将通过更多细节向您描述问题:XML文件包含联系人列表(例如姓名,地址......)。 The only way I can obtain this information is through an ArrayList, which will be given to me. 我可以获取此信息的唯一方法是通过ArrayList,它将提供给我。 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 因为我需要以有序的方式将这个数组列表的内容存储在Java Swing表中,所以我想将它转换为二维对象数组

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. 不要将ArrayList<Contact>转换为Object[][] ,而是尝试使用JTable(TableModel)构造函数。 You can write a custom class that implements the TableModel interface. 您可以编写实现TableModel接口的自定义类。 Sun has already provided the AbstractTableModel class for you to extend to make your life a little easier. 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);

The simple way is to add a method to the Contact like 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();
}

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

I managed to find "a way" to do so, knowing the number of attributes each contacts has (6). 我知道每个联系人拥有的属性数量,我设法找到“一种方法”(6)。 So considering an ArrayList listofContacts 所以考虑一个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());
        }
    }

What you really want is to sort the ArrayList. 你真正想要的是对ArrayList进行排序。 To do that your Contacts class must implement a Comparator method. 为此,您的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

I will recommend that you parse your XML into java objects and store the object in a custom data object. 我建议您将XML解析为java对象,并将对象存储在自定义数据对象中。 This will make it easier for you to do many operations on the available data. 这将使您更容易对可用数据执行许多操作。

Here is small tutorial on how to do it. 是关于如何做的小教程。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM