Philipp:
Trato de conseguir mi cabeza alrededor de Java funcional y corrientes.
Por ejemplo, una manera de crear nuevo objeto con sólo una pequeña diferencia en el nombre sería:
List<NewTopic> topicList = new ArrayList<NewTopic>();
for (Event event : events) {
System.out.println(events.toString());
topicList.add(new NewTopic(event.getName() + "-in", 1, (short) 1));
topicList.add(new NewTopic(event.getName() + "-out", 1, (short) 1));
topicList.add(new NewTopic(event.getName() + "-err", 1, (short) 1));
}
En lugar de encajonamiento tres objetos en tres líneas de un bucle anidado con una serie adicional de cadenas ( "en", "fuera", "err") sería posible.
Ahora, con flujos de algo como esto debería ser posible:
List<NewTopic> topicList = new ArrayList<NewTopic>();
String[] topicNames = {"-in", "-out", "-err"};
events.forEach(
event -> Arrays.stream(topicNames).forEach(
ending -> topicList.add(
new NewTopic(event.getName()
+ ending, 1, (short) 1)
)
)
);
Es que hay mucho más elegante + más corto para hacer esto?
¡Gracias!
Lino:
Estaban cerca, en lugar de utilizar foreach para añadir a una ya existente List
se debe utilizar un Collector
:
String[] topicNames = {"-in", "-out", "-err"};
List<NewTopic> topicList = events.stream()
.flatMap(event -> Arrays.stream(topicNames)
.map(ending -> event.getName() + ending)
)
.map(name -> new NewTopic(name, 1, (short) 1))
.collect(Collectors.toList());