首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntStream类在JDK1.6中吗?

IntStream类在JDK1.6中吗?
EN

Stack Overflow用户
提问于 2014-11-18 16:20:39
回答 2查看 405关注 0票数 1

在java 6中还有类似于java.util.stream.IntStream (的java 8)的类吗?

我想实现

代码语言:javascript
复制
  List<Integer> list = IntStream.of(intArray).boxed().collect(Collectors.toList());

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-18 16:24:42

如果您只想将int[]转换为List<Integer>

你可以:

创建自己的ArrayList并手动添加元素

代码语言:javascript
复制
    List<Integer> list = new ArrayList<Integer>(intArray.length);
    for(int value : intArray){
        list.add(value);
    }

或者,您可以轻松地编写自己的类,使用支持基元数组的方法实现列表:

代码语言:javascript
复制
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);
        }

}

然后它只是

代码语言:javascript
复制
 List<Integer> list = new IntArrayList(intArray);
票数 2
EN

Stack Overflow用户

发布于 2014-11-18 16:29:15

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

你可以:

  1. 遍历int数组,并将数字一个一个地添加到新集合中。 int[] intArray ={ 1,2,3 };List ints =新ArrayList<>(intArray.length);for (int i: intArray) { ints.add(i);}
  2. 或者你可以去图书馆帮你做这件事。例如,番石榴做得很好:Ints.asList()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26998984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档