是JDK 1.6中的IntStream类?

时间:2014-11-18 16:20:39

标签: java

在java 6中是否还有其他类和java.util.stream.IntStream(java 8)一样使用

我想实现

  List<Integer> list = IntStream.of(intArray).boxed().collect(Collectors.toList());

在java 6或更低版本中如何实现

2 个答案:

答案 0 :(得分:4)

不,在JDK6中没有简单的方法可以做到这一点,这正是他们在JDK8中添加它的原因。

你可以:

  1. 遍历int数组并逐个添加数字到新集合

    int[] intArray = { 1,2,3 };
    List<Integer> ints = new ArrayList<>(intArray.length);
    
    for (int i : intArray) {
        ints.add(i);
    }
    
  2. 或者您可以联系图书馆为您执行此操作。例如,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);