2014-11-18 7 views
1

Есть ли другой класс, который и будет использовать как java.util.stream.IntStream (ява 8) в Java 6- класс IntStream в JDK 1.6?

Я хотел достичь

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

как можно в Java 6 или ниже

+1

Не в JDK прямо, нет. Это может быть реализация Guava. –

+0

Guava - это библиотека. –

ответ

2

If все, что вы хотите, чтобы преобразовать int[] в List<Integer>

вы можете:

создать свой собственный ArrayList и добавьте элементы вручную

List<Integer> list = new ArrayList<Integer>(intArray.length); 
    for(int value : intArray){ 
     list.add(value); 
    } 

Или вы можете легко написать свой собственный класс, реализующий список, используя примитивную поддержку массива:

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); 
+0

Массивы. asList (numbr); не работает – Pravin

+0

да, я заметил. Я исправил свой ответ извините – dkatzel

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. или вы можете обратиться к библиотеке, чтобы сделать это для тебя. Например, Гуава делает это довольно хорошо: Ints.asList()

+0

yap его там в Guava (только что отмечен), но просто для преобразования массива в список нельзя добавить библиотеку – Pravin

+0

Конечно. Вы должны использовать его для всех других вещей, которые он предоставляет, тоже :). В любом случае, если вам не нужны такие функции, вы можете легко сделать это вручную. –

+1

Спасибо за помощь – Pravin

Смежные вопросы