Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

FOR comum usando java 8

Galera eu me deparei com uma situação que aos meus olhos só é possivel ser resolvida com um laço for padrão, porém já faz algum tempo que eu só uso o forEach do java 8, uso filter, map e etc ... Só que nessa situação eu não vejo como aplicar esses métodos, mas acredito que possa existir uma forma de aplicar as melhorias do java 8 nessa situação, mas não sei como.

O código é similar ao que segue abaixo:

 for(int i = 0; i < objetoUm.getListaDeItens().size(); i++) {
            Utils.copyNonNullProperties(objetoUm.getListaDeItens.get(i), objetoDois.getListaDeItens.get(i));
 }

Se alguém puder me explicar alguma outra forma de fazer ou então mandar algum link que explique, eu ficarei grato.

2 respostas

Se você quer só duplicar os objetos pode ser algo assim:

 objetoDois = objetoUm.getListaDeItens().
     stream().
     map( item -> Utils.copyNonNullProperties(item, new Item()) ).
     collect(Collectors.toList());
solução!

Eu acabei usando uma solução mais ou menos assim:

IntStream.range(0, objetoUm.getListaDeItens().size())
                .forEach(idx -> Utils.copyNonNullProperties(objetoUm.getListaDeItens().get(idx), 
                        objetoDois.getListaDeItens().get(idx)));

Que pela documentação foi o que mais se encaixou na minha opnião:

 /**
     * Returns a sequential ordered {@code IntStream} from {@code startInclusive}
     * (inclusive) to {@code endExclusive} (exclusive) by an incremental step of
     * {@code 1}.
     *
     * @apiNote
     * <p>An equivalent sequence of increasing values can be produced
     * sequentially using a {@code for} loop as follows:
     * <pre>{@code
     *     for (int i = startInclusive; i < endExclusive ; i++) { ... }
     * }</pre>
     *
     * @param startInclusive the (inclusive) initial value
     * @param endExclusive the exclusive upper bound
     * @return a sequential {@code IntStream} for the range of {@code int}
     *         elements
     */
    public static IntStream range(int startInclusive, int endExclusive) {

Obrigado.