即 Java.util 提供的 Arrays 中的 asList 方法,可以直接将一般的字符串数组以及包装类后的结果做直接转换。
需要注意的是 :通过这种方式得到的List 不能执行增删操作,否则会抛出
java.lang.UnsupportedOperationException 异常,即不支持操作的异常,一般的获取get, size等可以照常使用
原因 : Arrays.asList(str)返回值是java.util.Arrays类中一个私有静态内部类 java.utiil.Arrays.Arraylist,不是我们平时用的java.util.ArrayList();
适用于 只转换后作为读取的目标,不能用于增删操作
示例代码如下:
// 引用类型
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String[] strings = {"dd", "aa", "545", "ee"};
// 基本类型
int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// 元素转换成功
List<Integer> integers = Arrays.asList(cardNumberArray);
List<String> list = Arrays.asList(strings);
// 出现了基本类型
List<int[]> ints = Arrays.asList(cardNumberArrayInt);
// 执行了添加操作 结果出错
integers.add(15);
同时可以看的出 上面如果直接使用了 int[] 这种基本类型, 转换时并不是我们预期的 int 而且把 int[] 认为了是一个泛型中的基本类型,泛型中不支持基本数据类型,所以如果非要使用尽量转为包装类,除非只做基本的运算。
asList 返回的是一个视图,简单来说只能看和读取,不能执行其他操作
总的来说这种方式泛用性不是很强
将第一种 Arrays.asList 的返回值作为 arrayList 够构造方法的入参,即可构造出可以进行增删操的正常 list
代码如下:
// 引用类型
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String[] strings = {"dd", "aa", "545", "ee"};
List<Integer> arrayList1 = new ArrayList<>(Arrays.asList(cardNumberArray));
List<String> arrayList2 = new ArrayList<>(Arrays.asList(strings));
适用于 数组转为需要执行增删等正常操作的 list,同时数据量不是太大
通过 Collections.addAll(要赋值的list, 原有list);
同样是 JDK 自带的 Collections, 先创建一个对应的 list 并赋予原有数组长度,然后给与赋值
Collections.addAll() 会将数组中的元素转为二进制,然后添加到List中。
这种方法 效率相对较高
示例代码如下:
// 引用类型
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List arrayList = new ArrayList<>(cardNumberArray.length);
Collections.addAll(arrayList, cardNumberArray);
JDK 1.8 支持的 基本类型转换 int[],long[],double[]
不支持的 short[ ],byte[ ],char[]
示例代码如下:
// 基本类型
int[] cardNumberArrayInt = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> collect1 = Arrays.stream(cardNumberArrayInt).boxed().collect(Collectors.toList());
其他支持的 long[] 以及 double[] 与上面类似
同样的引用类型也可以使用这种方式:
Integer[] cardNumberArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> collect = Arrays.stream(cardNumberArray).collect(Collectors.toList());
引用类型与基础类型相比 少了 boxed 这一过程,是一个转包装类的过程。
对于Stream 不太熟悉的可以参考我的另一篇对 Stream 使用的描述
Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)等学习和使用理解及案例
四种如上
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat