Mixed ArrayLists?

Is it possible to store a mixture of object types in an ArrayList? If so, how?

This is what I have tried so far:

List<Object> list = new ArrayList<Object>(); list.add(new String("Hello World")); list.add(new Integer(1)); list.add(new Long(1l)); for (i = 0; i < list.size(); i++) { if (list.get(i) instanceof String){ sqlPreparedStatement.setString((i+1), (String) list.get(i)); } else if (list.get(i) instanceof Integer) { sqlPreparedStatement.setInt((i+1), (Integer) list.get(i)); } else if (list.get(i) instanceof Long) { sqlPreparedStatement.setLong((i+1), (Long) list.get(i)); } } 

But this eliminates the casting exception.

Thanks in advance for any input!

+8
java collections arraylist list
source share
3 answers

That's what you need:

 List<Object> list = new ArrayList<Object>(); list.add(new String("Hello World")); list.add(new Integer(1)); list.add(new Long(1l)); for (Object obj: list) { if (obj instanceof String){ sqlPreparedStatement.setString((String) obj); } else if (obj instanceof Integer) { sqlPreparedStatement.setInt((Integer) obj); } else if (obj instanceof Long) { sqlPreparedStatement.setLong((Long) obj); } } 
+18
source share

Sorry to break your parade, but you shouldn't use an ArrayList of 3 (or any) different types to start with. If the information is related, create a class that contains related information, and create an ArrayList that contains only one type: objects of this class.

Change 1:
For example, let's say a class for storing such data:

 class SqlData { private String textData; private int intData; private long longData; public SqlData(String textData, int intData, long longData) { this.textData = textData; this.intData = intData; this.longData = longData; } public String getTextData() { return textData; } public int getIntData() { return intData; } public long getLongData() { return longData; } } 

and used like this:

  List<SqlData> sqlDataList = new ArrayList<SqlData>(); sqlDataList.add(new SqlData("Hello World", 1, 11L)); for (int i = 0; i < sqlDataList.size(); i++) { try { sqlPreparedStatement.setString(i + 1, sqlDataList.get(i).getTextData()); sqlPreparedStatement.setInt(i + 1, sqlDataList.get(i).getIntData()); sqlPreparedStatement.setLong(i + 1, sqlDataList.get(i).getLongData()); } catch (SQLException e) { e.printStackTrace(); } } 
+10
source share

Why are you doing this so hard? PreparedStatement has a setObject() method - just use this:

  List<Object> list = new ArrayList<Object>(); list.add(new String("Hello World")); list.add(new Integer(1)); list.add(new Long(1l)); for (int i = 0; i < list.size(); i++) sqlPreparedStatement.setObject(i + 1, list.get(i)); // NOTE: columns count from 1 

NOTE. The java SQL API counts everything from 1, not from zero, so the columns are numbered 1 ... size (), not 0 ... size () - 1

+4
source share

All Articles