java中如何返回多个list

Python015

java中如何返回多个list,第1张

方法一、将多个List封装到一个JavaBean内:

private static void show1() {

StringEQTest.ListArr listArr = new StringEQTest.ListArr()

List<String>names = listArr.names

for (int i = 0i <names.size()i++) {

System.out.println(names.get(i))

}

List<Integer>ages = listArr.ages

for (int i = 0i <ages.size()i++) {

System.out.println(ages.get(i))

}

}

public static class ListArr {

List<String>names = new ArrayList<String>()

List<Integer>ages = new ArrayList<Integer>()

public ListArr() {

names.add("names1")

names.add("names2")

names.add("names3")

ages.add(50)

ages.add(40)

ages.add(30)

ages.add(88)

}

public List<String>getNames() {

return names

}

public void setNames(List<String>names) {

this.names = names

}

public List<Integer>getAges() {

return ages

}

public void setAges(List<Integer>ages) {

this.ages = ages

}

}

结果:

names1

names2

names3

50

40

30

88

-------------------------------------------------------------------------------

方法二、将List包装到Map集合内,取出的时候需要进行类型转换

private static void show2() {

Map<String, Object>lists = getLists()

List<String>names = (List<String>) lists.get("names")

for (int i = 0i <names.size()i++) {

System.out.println(names.get(i))

}

List<Integer>ages = (List<Integer>) lists.get("ages")

for (int i = 0i <ages.size()i++) {

System.out.println(ages.get(i))

}

}

public static Map<String, Object>getLists() {

List<String>names = new ArrayList<String>()

List<Integer>ages = new ArrayList<Integer>()

names.add("names1")

names.add("names2")

names.add("names3")

ages.add(50)

ages.add(40)

ages.add(30)

ages.add(88)

Map<String, Object>map = new HashMap<String, Object>()

map.put("names", names)

map.put("ages", ages)

return map

}

结果:

names1

names2

names3

50

40

30

88

答案是肯定的!

public class Demo01<E> {

private List<E> list = new ArrayList<E>()

public List<E> store(E[] arr){

list = Arrays.asList(arr)

return list

}

public static void main(String[] args) {

Demo01<String> d = new Demo01<>()

String animals[] = {"Cat","Dog","Pig","Monkey"}

List<String> list = d.store(animals)

for (String string : list) {

System.out.print(string + "\t")

}

}

}

两种方案:

第一种:(推荐使用这种)

只要修改返回类型,并把

return tmplist改成return tmplist.totoArray()就行了 取出的是Object数组,需要强制转换成HashMap;

//返回值是数组

public Object[] quyListBySqlAndParams(String querystr, List params,int dno) throws SQLException {

Connection conn = null

PreparedStatement pstmt = null

ResultSet rst = null

ResultSetMetaData rsmd = null

List tmplist=new ArrayList()

try{

conn = myDataUtil.getConnection(dno)

pstmt = conn.prepareStatement(querystr)

//参数赋值

for(int i=0i<params.size()i++){

String param = params.get(i)==null?"":params.get(i).toString().trim()

pstmt.setString(i+1,param)

}

rst = pstmt.executeQuery()

rsmd = rst.getMetaData()

while (rst.next()) {

Map tmpmap = new HashMap()

for ( int i = 1i <= rsmd.getColumnCount()i++ ){

tmpmap.put(rsmd.getColumnName(i), rst.getObject(i))

}

tmplist.add(tmpmap)

}

}catch(Exception e){

System.out.println("pubgetstr"+e.toString()+querystr)

}finally{

myDataUtil.free(rst,pstmt,conn)

//这里调用toArray()方法返回数组

return tmplist.toArray()

}

}

方案二:

原理就是将结果集的游标定位到最后一行,然后通过返回行号确定记录数,从而确定数组的长度。然后再将游标回退到beforefirst

但是一定要注意 这么做有个地方要考虑, 默认的ResultSet类型是TYPE_FORWARD_ONLY,只向前的游标,不允许指针回退在定义时要将默认的ResultSet类型里的TYPE_FORWARD_ONLY改成ResultSet.TYPE_SCROLL_INSENSITIVE,把你那句改成这个

pstmt = conn.prepareStatement(querystr, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)

//返回数组

public Object[] quyListBySqlAndParams(String querystr, List params,int dno) throws SQLException {

Connection conn = null

PreparedStatement pstmt = null

ResultSet rst = null

ResultSetMetaData rsmd = null

Object[] tmpAarry

try{

conn = myDataUtil.getConnection(dno)

//注意 这里做了修改 pstmt=conn.prepareStatement(querystr,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)

//参数赋值

for(int i=0i<params.size()i++){

String param = params.get(i)==null?"":params.get(i).toString().trim()

pstmt.setString(i+1,param)

}

rst = pstmt.executeQuery()

rsmd = rst.getMetaData()

// 这里做了修改

rst.last()

int count = rst.getRow()

tmpAarry = new Object[count]

rst.beforeFirst()

while (rst.next()) {

Map tmpmap = new HashMap()

int j = 0

for ( int i = 1i <= rsmd.getColumnCount()i++ ){

tmpmap.put(rsmd.getColumnName(i), rst.getObject(i))

}

tmpAarry[j]=tmpmap

j++

}

}catch(Exception e){

System.out.println("pubgetstr"+e.toString()+querystr)

}finally{

myDataUtil.free(rst,pstmt,conn)

// 返回的是个数组

return tmpAarry

}

}

好了,这两种方法的结构是一样的,看是你也看到了,自己写有多麻烦,还要考虑很多意想不到的问题,比如那个滚动结果集。所以能用java api中提供的最好用,那都是经得住考验的,而且方便的很。