Как работает Java Spliterator

428
17 января 2018, 16:56

Есть List list. Я хочу пробежаться по всем элементам и удвоить их.

list.spliterator().forEachRemaining(e -> e*2);

В итоге мой лист остается неизменным.

Я могу это сделать так:

List newList = new ArrayList<>();
for(int e in list) {
    newList.add(e);
}

Но прошлый вариант короче. Я хочу это сделать с помощью лямбда-функции. Какие есть варианты?

Answer 1

Здесь можно и без spliterator'а. Способы делятся на три типа.

  1. изменяется исходный список

    • .replaceAll() (спасибо @zRrr!)

      List<Integer> list = Arrays.asList(1, 2, 3);
      list.replaceAll(x -> x * 2);

      (Ideone)

    • Похоже на исходный вариант (цикл с индексами + методы .get(), .set()):

      for (int i = 0; i < list.size(); ++i) {
          int x = list.get(i);
          list.set(i, x * 2);
      }

      (Ideone)

  2. создаётся новый список с нужными элементами

    • .stream() + .map() + .collect():

      List<Integer> listTransformed = list
          .stream()
          .map(x -> x * 2)
          .collect(Collectors.toList());

      (Ideone)

    • Исходный вариант:

      List<Integer> listTransformed = new ArrayList<>();
      for (int x : list) {
          newList.add(x * 2);
      }

      (Ideone)

  3. создаётся view object над исходным списком

    • Используя метод Lists.transform() библиотеки Guava:

      Lists.transform(list, x -> x * 2);

Варианты, когда в результате получается массив вместо списка:

  • .stream() + .mapToInt() + .toArray():

    int[] array = list
        .stream()
        .mapToInt(x -> x * 2)
        .toArray();

    (Ideone)

READ ALSO
Передача данных клиент-сервер в игре java

Передача данных клиент-сервер в игре java

ЗдравствуйтеПишу маленькую сетевую игру

273
Как проверять, добавлен ли объект в избранное или нет?

Как проверять, добавлен ли объект в избранное или нет?

В активити, к кнопке (к обычной button) прибил следующую команду, при вызове которой, будут взяты данные и сохранены в "Избранное"

302
Что будет если вызывать Listener каждый раз?

Что будет если вызывать Listener каждый раз?

Есть 2 кнопки A и B, при нажатии на Aзапускается некий b

215
В чем разница методов фрагмента onCreateView и onViewCreated?

В чем разница методов фрагмента onCreateView и onViewCreated?

Хотелось бы понять главные отличияИ в каких случаях использовать тот или другой?

286