package Stream;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
public class Map {
public static void main(String[] args) {
Consumer<String> print = System.out::print;
List<String> marcas = Arrays.asList(" bmw " , " fiat " , " volks ");
marcas.stream().map(m-> m.toUpperCase()).forEach(print);
UnaryOperator<String> maiuscula= n -> n.toUpperCase();
UnaryOperator<String> primeiraletra= n -> n.charAt(0) + "";
UnaryOperator<String> grito= n -> n + "!!!";
marcas.stream()
.map(maiuscula)
.map(primeiraletra)
.map(grito)
.forEach(print);
}
}
Console -> BMW FIAT VOLKS !!! !!! !!!
Bom dia, estou aprendendo e não consigo achar o erro.
Obrigado pela ajuda!
Nesta linha:
marcas.stream().map(m -> m.toUpperCase()).forEach(print);
Você transforma as strings em maiúsculas e as imprime. O resultado é:
BMW FIAT VOLKS
Mas como o System.out::print
não adiciona a quebra de linha no final, então qualquer coisa que for impressa depois é colocada na mesma linha.
E o que é impresso depois? É o resultado disso:
marcas.stream()
.map(maiuscula)
.map(primeiraletra)
.map(grito)
.forEach(print);
Ou seja, você converte a string para letras maiúsculas, e depois pega o primeiro caractere. Só que em todas as suas strings, o primeiro caractere é o espaço (veja que todas começam com um espaço). Só porque você chamou a variável de primeiraLetra
, não quer dizer que vai pegar uma letra. charAt
pega caracteres, e o espaço também é um caractere.
Ou seja, você está pegando o primeiro caractere das strings, e como todas começam com espaço, então na verdade está pegando só espaços. Depois você adiciona as exclamações, por isso o resultado é:
!!! !!! !!!
(repare no espaço antes do primeiro
!
).
E como o primeiro print
não adicionou a quebra de linha, isso é colocado logo depois do que foi impresso anteriormente, na mesma linha. Por isso que a saída é:
BMW FIAT VOLKS !!! !!! !!!
Repare que depois de “VOLKS” tem três espaços: dois são da string original, e um é do primeiro caractere da string (ou seja, o resultado do segundo print
).
2 curtidas
Muito obrigado.
Explicação corretissima…
Agora deu certo
Abraço!