在java 6中是否还有其他类和java.util.stream.IntStream
(java 8)一样使用
我想实现
List<Integer> list = IntStream.of(intArray).boxed().collect(Collectors.toList());
在java 6或更低版本中如何实现
答案 0 :(得分:4)
不,在JDK6中没有简单的方法可以做到这一点,这正是他们在JDK8中添加它的原因。
你可以:
遍历int
数组并逐个添加数字到新集合
int[] intArray = { 1,2,3 };
List<Integer> ints = new ArrayList<>(intArray.length);
for (int i : intArray) {
ints.add(i);
}
或者您可以联系图书馆为您执行此操作。例如,Guava做得非常好:Ints.asList()
答案 1 :(得分:2)
如果你想要的只是将int[]
转换为List<Integer>
你可以:
创建自己的ArrayList并手动添加元素
List<Integer> list = new ArrayList<Integer>(intArray.length);
for(int value : intArray){
list.add(value);
}
或者您可以使用基本数组支持轻松编写自己的实现List的类:
public final class IntArrayList extends AbstractList<Integer> implements RandomAccess {
private final int[] array;
public IntArrayList(int[] array) {
this.array = array;
}
@Override
public Integer get(int index) {
return array[index];
}
@Override
public int size() {
return array.length;
}
@Override
public Integer set(int index, Integer element) {
Integer old = array[index];
array[index] = element.intValue();
return old;
}
public int indexOf(Object o) {
if(o==null){
return -1;
}
if(!(o instanceof Integer)){
return -1;
}
int val = ((Integer)o).intValue();
for (int i=0; i<array.length; i++){
if (val==array[i]){
return i;
}
}
return -1;
}
public boolean contains(Object o) {
return indexOf(o) != -1;
}
/**
* Optimization of equals since
* we know we are have an array of ints
* this should reduce boxing/unboxing
* on our end at least.
*/
@SuppressWarnings("rawtypes")
public boolean equals(Object o) {
if (o == this){
return true;
}
if (!(o instanceof List)){
return false;
}
int currentOffset=0;
ListIterator e2 = ((List) o).listIterator();
while(currentOffset<array.length && e2.hasNext()) {
Object o2 = e2.next();
//will return false if o2 is null
if(!(o2 instanceof Integer)){
return false;
}
if(array[currentOffset] !=((Integer)o2).intValue()){
return false;
}
currentOffset++;
}
return !(currentOffset<array.length || e2.hasNext());
}
/**
* Optimization of hashcode since
* we know we have an array of ints.
*/
public int hashCode() {
return Arrays.hashCode(array);
}
}
然后它只是
List<Integer> list = new IntArrayList(intArray);