Как конвертировать int [] в Integer [] в Java?

Когда вы создаете регулярное выражение, у вас есть возможность захвата частей матча и сохранения их в качестве заполнителей. Они нумеруются начиная с $1.

Например:

/A(\d+)B(\d+)C/

Это будет захватывать из A90B3C значения 90 и 3. Если вам нужно группировать вещи, но не хотите их захватывать, используйте (?:...) версию вместо (...).

Цифры начинаются слева направо в том порядке, в котором скобки открыты. Это означает:

/A((\d+)B)(\d+)C/

При сопоставлении с той же строкой будут записаны 90B, 90 и 3.

141
задан Jonik 27 July 2010 в 14:53
поделиться

6 ответов

Преобразовывают интервал [] к Целому числу []:

    import java.util.Arrays;
    ...

    int[] aint = {1,2,3,4,5,6,7,8,9,10};
    Integer[] aInt = new Integer[aint.length];

    Arrays.setAll(aInt, i -> aint[i]);
0
ответ дан 23 November 2019 в 22:36
поделиться

Если вы хотите преобразовать int [] в Integer [] , в JDK нет автоматического способа сделать это . Однако вы можете сделать что-то вроде этого:

int[] oldArray;

... // Here you would assign and fill oldArray

Integer[] newArray = new Integer[oldArray.length];
int i = 0;
for (int value : oldArray) {
    newArray[i++] = Integer.valueOf(value);
}

Если у вас есть доступ к библиотеке Apache lang , тогда вы можете использовать метод ArrayUtils.toObject (int []) , подобный этому :

Integer[] newArray = ArrayUtils.toObject(oldArray);
76
ответ дан 23 November 2019 в 22:36
поделиться

Предположительно вы хотите, чтобы ключ к карте совпадал по значению элементов, а не по идентичности массива. В этом случае вам нужен какой-то объект, который определяет , равно и hashCode , как и следовало ожидать. Проще всего преобразовать в List , либо ArrayList , либо лучше использовать Arrays.asList . Лучше, чем это, вы можете ввести класс, представляющий данные (аналогичный java.awt.Rectangle , но я рекомендую сделать переменные закрытыми финальными, а класс также финальным).

8
ответ дан 23 November 2019 в 22:36
поделиться

Вместо того, чтобы писать свои собственные код, вы можете использовать IntBuffer для обертывания существующего int [] без необходимости копировать данные в массив Integer

int[] a = {1,2,3,4};
IntBuffer b = IntBuffer.wrap(a);

IntBuffer реализует сопоставимые, так что вы можете использовать код, который вы уже написали. Формально сопоставляет ключи сравнения таким образом, что a.equals (b) используется, чтобы сказать, что два ключа равны, поэтому два IntBuffers с массивом 1, 2, 3 - даже если массивы находятся в разных местах памяти - считаются равными и поэтому будут работайте для своего частотного кода.

ArrayList<int[]> data = ... // load a dataset`

Map<IntBuffer, Double> frequencies = new HashMap<IntBuffer, Double>();

for(int[] a : data) {

    IntBuffer q = IntBuffer.wrap(a);

    if(frequencies.containsKey(q)) {
        frequencies.put(q, tfs.get(q) + p);
    } else {
        frequencies.put(q, p);
    }

}

Надеюсь, что это поможет

3
ответ дан 23 November 2019 в 22:36
поделиться

Я ошибся в предыдущем ответе. Правильное решение - использовать этот класс в качестве ключа в карте, обертывающей фактический int [].

public class IntArrayWrapper {
        int[] data;

        public IntArrayWrapper(int[] data) {
            this.data = data;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            IntArrayWrapper that = (IntArrayWrapper) o;

            if (!Arrays.equals(data, that.data)) return false;

            return true;
        }

        @Override
        public int hashCode() {
            return data != null ? Arrays.hashCode(data) : 0;
        }
    }

, и изменить свой код следующим образом:

   Map<IntArrayWrapper, Double > freqs = new HashMap<IntArrayWrapper, Double>();

    for (int[] data : datas) {
        IntArrayWrapper wrapper = new IntArrayWrapper(data);

        if ( freqs.containsKey(wrapper)) {
            freqs.put(wrapper, freqs.get(wrapper) + p);
        }

        freqs.put(wrapper, p);
    }
6
ответ дан 23 November 2019 в 22:36
поделиться

вам не нужно. int [] является объектом и может использоваться как ключ внутри карты.

Map<int[], Double> frequencies = new HashMap<int[], Double>();

- правильное определение карты частот.

Это было неверно :-). Также опубликовано правильное решение:

-1
ответ дан 23 November 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: