La mejor manera de evitar el código redundante, mientras que la creación de múltiples nuevos objetos

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 Listse 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());

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=338501&siteId=1
Recomendado
Clasificación