java中如何返回多个list

作者&投稿:祖法 (若有异议请与网页底部的电邮联系)
java 如何能在一个方法中返回多个值?~

最开始说一下我使用的解决办法:Pair 和 Triple
偶然看到这个问题,浏览量也很大,还是写一下我认为最好的办法吧,跟大家交流一下。
说一下前面的人答的方案,都可以解决问题,但是觉得不太好。您要是说 可以解决问题就行,那我无话可说。写代码如果只是为了完成任务,不考虑实现是否优雅 和咸鱼有什么区别呢。
数组明显不合适,数组适合放同一类型的数据,当然,你可以使用List,用Object 放结果,调用方需要知道Object的实际类型并做强制转换,不够优雅,差评
Map 是一种能解决问题的做法,使用Object 来放结果也存在调用方需要知道其实际类型并做强转的问题,用key 作区分,方法调用者需要知道方法内部的key ,即使使用全局变量做key 也不够优雅
自定义对象,新建一个类,例如 public class DoubleResult{getter; allArgsConstructor;}、public class TripleResult{getter; allArgsConstructor;} ,效果棒棒的
接下来要说的 Pair 和Triple 就是上面第三种方案的实现。org.apache.commons.lang3.tuple.Pair,org.apache.commons.lang3.tuple.Triple 是commons-lang包里的两种元组类型。Pair可以存两个数据,Triple 可以存三个,再多 那么考虑一下你的方法是否可以拆一下。
简单说一下他们的用法吧。
Pair 初始化:
Pair.of(L left, R right); 例:Pair.of("a","b");
或:
Pair pair = new Pair() { @Override public Object getLeft() { return null; } @Override public Object getRight() { return null; } @Override public Object setValue(Object value) { return null; }}; Triple 初始化:
Triple.of(L left, M middle, R right) 或:
Triple triple = new Triple() { @Override public Object getLeft() { return null; } @Override public Object getMiddle() { return null; } @Override public Object getRight() { return null; } }; Pair 获取内容:
pair.getKey();pair.getValue(); Triple 获取内容:
triple.getLeft();triple.getMiddle();triple.getRight(); 另外org.apache.commons.lang3.tuple 包下还有ImmutablePair、ImmutableTriple、MutablePair、MutableTriple 分别对应两种结构的不可变和可变类型,大家可以自行探索。

// list不支持removeAll,removeAll修改集合本身List list1 = Arrays.asList("a","b","c");List list2 = Arrays.asList("b","c","d");Set set1 = new HashSet(list1);Set set2 = new HashSet(list2);set1 .removeAll(set2 );//set1 : aSet set3 = new HashSet(list1);set2 .removeAll(set3 );//set2 : d

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

private static void show1() {
StringEQTest.ListArr listArr = new StringEQTest.ListArr();

List<String> names = listArr.names;
for (int i = 0; i < names.size(); i++) {
System.out.println(names.get(i));
}

List<Integer> ages = listArr.ages;
for (int i = 0; i < 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 = 0; i < names.size(); i++) {
System.out.println(names.get(i));
}
List<Integer> ages = (List<Integer>) lists.get("ages");
for (int i = 0; i < 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

List<List,List>
你返回list,里面有两个list就能搞定

// 定义一个list.存放两个变量,然后返回
List<T> list = new ArrayList<T>();

list.add(pointlist1);
list.add(pointlist2);

新建一个链表,把这两个存里边试试


AVA中生存模式下个个地图的攻略?(如死亡峡谷,回合,逃脱等等)骗分的滚...
上了船 打油桶 到前面打、打有怪站在油桶那里 跑到船尾打、到通道(就是上面有炸弹飞那里 左右岸上一边一个 中间2个到船上 船上的打那个放炸弹的、到后面打那个油桶巨人 可以采取同归于尽的方式:把巨人引导船头 有个栅栏 在那里站着不要动 等怪过去打你 你在原地跳两下 然后在往左跑一两步...

玩战地之王(AVA)时,CPU使用率100%
当然在注册表中还有很多地方都可以隐藏“木马”程序,如:“HKEY-CURRENT-USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run”、“HKEY-USERS\\***\\Software\\Microsoft\\Windows\\CurrentVersion\\Run”的目录下都有可能,最好的办法就是在“HKEY-LOCAL-MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run”下找到“木马该...

请问AVA我军胜利和我军失败后那个男人说的一长串英语是什么?
炸弹以被解除,行动失败,返回基地!

...提取战地之王客户端资源 到了100%后就没了。怎么回事?
在system.ini文件中[BOOT]下面的“shell =文件名。正确的文件名应该是的”explorer.exe“,如果不是的”explorer.exe“,而是一个”的Shell = Explorer.exe程序名,那幺,后面的程序就是“木马”程序,就是说你已经中“木马”。最复杂的在注册表中,输入regedit命令打开注册表编辑器,点击的目录:“H...

ava.lang.nullpointerexception
如果从上行服务器上收到的请求中的Expires头域超时,那么应当返回一个408(Request TimeOut)错误。5.6 505 Version Not Supported服务器不支持对应的SIP版本。服务器是无法处理具有客户端提供的相同主版本号的请求,就会导致这样的错误信息。5.7 Message To Large服务器无法处理请求,因为消息长度超过了处理的长度。6 ...

如何判断字符串是否相等
可以使用库函数strcmp判断:strcmp是C语言比较字符串的库函数,形式为int strcmp(char *a, char *b);该函数会对a和b的每个字符,按照ascii码值比较,如果二者完全相同返回0;如果a的ascii码值先出现较大者,会返回1;否则返回-1。所以,要判断字符串相等,可以使用。"); else printf("str_1 is ...

谁有能用的AVA准星瞄准器?
那个是买的,叫随时出击,去商城中找背包,背包B,可以吧盲狙的枪加上准信,但是很大。如果AWM(所有类型的AWM)买背包C的稳定狙击,那么准信比M4A1蹲着还小!!!神了就,别人开镜的准确度啊!但是蹲下就不行了,还有跳全都会影响

我是开超市的,每天有很多有一点点坏的水果该怎么处理
1. 对于存在的网页内容由于路径改变而导致访问不了时,可在IIS 中定义404错误指向一个动态页面,在页面里面使用301永久重定向跳转到新的地址,此时伺服器返回301状态码。 2. 设定404指向一个设计好的 档案,此时页面返回的404状态码。不同的空间商基本都提供404设定的功能,直接上传档案设定即可。 3...

明成祖的美女蔡文姬为什么要嫁给匈奴?匈奴人在蔡文姬的十二年悲惨生活...
她是个命运多舛的女人。从小失去父母,成了寡妇和囚犯,中年离开了第二任丈夫和孩子。这样看来,她在古代才貌双全的才女中还是独一无二的。美丽的蔡文姬为什么要嫁给匈奴?蔡琰,本名岳吉,生卒年不详。陈,东汉人,东汉大文学家蔡邕之女。第一次嫁给魏忠道,她老公死了回了家。后来由于匈奴入侵,蔡琰被匈奴左带走,嫁给...

王子文和素人吴永恩感情如何?
她们在节目中也曾出现过短暂的危机性时刻,就是王子文爆料,自己有一个儿子的时候,吴永恩表示要离开一下,很多人担心吴永恩不会接受,但他之后返回来,还和王子文要了一个拥抱。从那之后,王子文和吴永恩就开启了甜蜜模式,在镜头里,全都是他们幸福的时刻。吴永恩在为王子文弹琴后,深情亲吻了王子文。

仁布县15599128027: java 返回多个值 -
束元糖脉: 可以考复虑用List或者Map集合类型,如果你要返回的值为int、double、long等基础制数据类知型的话,可以使用对应道的封装类Integer、Double、Long等,如下方法定义:public List<Integer> method() { //TODO...}//Map形式 public Map<String,Integer> method() { //TOTO...}

仁布县15599128027: java中如果需要返回多个值怎么办 -
束元糖脉: java中每个方法的返回值,有且仅有一个,因为方法中一旦使用return语句返回返回值,整个方法就会结束,下面的语句也将不会执行. java中如果想返回多个值的话,可以采用数组和集合进行存储,然后返回集合或者数组即可.

仁布县15599128027: 关于Java的问题!怎么用return返回多个值吖? -
束元糖脉: 如果你想返回多个值,而这些值又都是不同的类型的话.你可以使用ArrayList来存放这些值,然后返回这个ArrayList,如果你的多个值是同一种数据类型的话你可以创建一个这种数据类型的数组来放他们

仁布县15599128027: java 如何能在一个方法中返回多个值? -
束元糖脉: 比如方法是 public List Test() {.......List list = new ArrayList();list.add(你要百的值1);list.add(你要的值2);下面依次类推 最后度return list; } 当然,你也可以用数组版等保存,权最后返回就可以了.

仁布县15599128027: java 中的返回值如何返回多个值? 求高人指点 可拜师啊 -
束元糖脉: 只能返回单个值!!!但是你可以用集合(List,hashmap等)来封装多个数据,或想要的对象都行然后返回这个集合...

仁布县15599128027: JAVA里的函数返回值,可以返回几个? -
束元糖脉: 可以返回多个 那容器装就可以了 @SuppressWarnings("unchecked") public List<Author> findall() { return getHibernateTemplate().loadAll(Author.class); }

仁布县15599128027: Java 一个方法返回多个数组可以吗?怎么实现? -
束元糖脉: 如果多个数组 的类型 中一样的是可以实现 的 可以返回一个list 或者二维数组 ...

仁布县15599128027: java逻辑函数编写(涉及算法,较难) 一个方法 返回值为一个双list的组合 List<List<>> getList(int i){ } -
束元糖脉: java逻辑函数编写(涉及算法,较难) 一个方法 返回值为一个双list的组合 List<>> getList(int i){ }package com.se.test;import java.util.ArrayList;import java.util.HashSet;import java.util.

仁布县15599128027: JAVA中一个方法能同时返回2个值么 -
束元糖脉: java中return语句不能同时返回两个值. java中return作为程序结束语句,return后直接会结束函数,同时返回一个返回值,这个返回值的类型是在函数方法上声明好了的,例如public int add(int a,int b){...; return a+b;},所以return有且仅有一个返回值. 但如果想要返回两个以上的值:可以使用string类型进行拼接,取到这个拼接的字符串之后,进行拆分就可以了.

仁布县15599128027: java 面向对象中 方法里面可以返回多个数据吗 给给满分 -
束元糖脉: 直接传递进去当然不可以,除非你用一个对象容器来容纳他,只有对象才可以传递进去改变,然后保持改变.基本数据类型是不可以的.为什么呢?因为传递的参数值是在栈内存的,当参数传递到方法,方法执行完毕后,参数值即从栈内存中消失.传递前的局部变量值不会改变.所以必须放到一个对象当中进行传递才可以.通过改变对象的成员变量来实现改变.所以,一种办法是设置成员变量,然后传递的值赋给成员变量.通过更改成员变量来更改传递的值.还有一种是把值放到一个list列表中,然后通过修改List对象来实现值得更改.你只要了解了Java的内存机制,你就会发现基本参数值是无法通过成员方法更改的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网