property examples array java-8 java-stream

examples - Modifique el valor de la propiedad de los objetos en la lista usando java 8 streams



java 8 stream map (5)

Puede hacerlo usando la función de mapa de flujos como se muestra a continuación, obtenga el resultado en un nuevo flujo para su posterior procesamiento.

Stream<Fruit> newFruits = fruits.stream().map(fruit -> {fruit.name+="s"; return fruit;}); newFruits.forEach(fruit->{ System.out.println(fruit.name); });

Tengo una lista de objetos Fruit en Arraylist y quiero modificar fruitName a su nombre plural. Consulte el ejemplo:

@Data @AllArgsConstructor @ToString class Fruit { long id; String name; String country; } List<Fruit> fruits = Lists.newArrayList(); fruits.add(new Fruit(1L, "Apple", "India")); fruits.add(new Fruit(2L, "Pineapple", "India")); fruits.add(new Fruit(3L, "Kiwi", "New Zealand")); Comparator<Option> byNameComparator = (e1, e2) -> e1.getName().compareToIgnoreCase(e2.getName()); fruits = fruits.stream().filter(fruit -> "India".equals(fruit.getCountry())) .sorted(byNameComparator).collect(Collectors.toList()); List<Fruit> fruitsWithPluralNames = Lists.newArrayList(); for (Fruit fruit : fruits) { fruit.setName(fruit.getName() + "s"); fruitsWithPluralNames.add(fruit); } System.out.println(fruitsWithPluralNames); // which prints [Fruit(id=1, name=Apples, country=India), Fruit(id=2, name=Pineapples, country=India), Fruit(id=3, name=Kiwis, country=New Zealand)]

¿Tenemos alguna forma de lograr el mismo comportamiento utilizando flujos de java8?


Puedes usar peek para hacer eso.

List<Fruit> newList = fruits.stream() .peek(f -> f.setName(f.getName() + "s")) .collect(Collectors.toList());


Puedes usar solo para cada forEach . Sin transmisión en absoluto:

fruits.forEach(fruit -> fruit.setName(fruit.getName() + "s"));


Si quieres crear una nueva lista, usa el método Stream.map :

List<Fruit> newList = fruits.stream() .map(f -> new Fruit(f.getId(), f.getName() + "s", f.getCountry()) .collect(Collectors.toList())

Si quieres modificar la lista actual, usa Collection.forEach :

fruits.forEach(f -> f.setName(f.getName() + "s"))


solo para modificar ciertas propiedades de la colección de objetos, puede usar directamente para cada una de las siguientes colecciones:

collection.forEach(c -> c.setXyz(c.getXyz + "a"))