Есть List list
. Я хочу пробежаться по всем элементам и удвоить их.
list.spliterator().forEachRemaining(e -> e*2);
В итоге мой лист остается неизменным.
Я могу это сделать так:
List newList = new ArrayList<>();
for(int e in list) {
newList.add(e);
}
Но прошлый вариант короче. Я хочу это сделать с помощью лямбда-функции. Какие есть варианты?
Здесь можно и без spliterator
'а. Способы делятся на три типа.
изменяется исходный список
.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)
создаётся новый список с нужными элементами
.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)
создаётся view object над исходным списком
Используя метод Lists.transform()
библиотеки Guava:
Lists.transform(list, x -> x * 2);
Варианты, когда в результате получается массив вместо списка:
.stream()
+ .mapToInt()
+ .toArray()
:
int[] array = list
.stream()
.mapToInt(x -> x * 2)
.toArray();
(Ideone)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В активити, к кнопке (к обычной button) прибил следующую команду, при вызове которой, будут взяты данные и сохранены в "Избранное"
Есть 2 кнопки A и B, при нажатии на Aзапускается некий b
Хотелось бы понять главные отличияИ в каких случаях использовать тот или другой?