SóProvas


ID
2620507
Banca
CS-UFG
Órgão
SANEAGO - GO
Ano
2018
Provas
Disciplina
Programação
Assuntos

Analise o código a seguir.


IntStream.iterate(2, x -> x < 20, x -> x * 2).forEach(System.out::print)


Em uma máquina que tem instalado o JAVA 9, esse código

Alternativas
Comentários
  • Alguém sabe o erro?

  • LETRA A

    Errei a questão e confesso que tive que pesquisar bastante para entender, se você tiver conhecimento prévio de expressões Lambda e Method Reference já ajuda demais.

    Mas vamos ao que interessa:

    IntStream é uma interface: IntStream é um fluxo de valores int primitivos. Faz parte do pacote java.util.stream, e você pode encontrar muitas das mesmas funções que no Stream <T> normal. Também existem streams para lidar com primitivos double e long.- Fonte(http://www.deadcoderising.com/2015-05-19-java-8-replace-traditional-for-loops-with-intstreams/)

    iterate é um Método Estático, na documentação da Oracle o iterate recebe apenas 2 PARÂMETROS, o que de cara nos permite reconhecer o erro da questão: static IntStream iterate(int seed, IntUnaryOperator f).

    O Código que compilou no meu PC

    IntStream
              .iterate(2, n-> n*2)
              .filter(n -> n > 0 && n < 20) 
              .forEach(System.out::println);

    ------
              .iterate(2, n-> n*2) -> Seed é o valor original de N - UnaryOperator é a operação que será aplica em cima de N
              .filter(n -> n > 0 && n < 20) -> filter significa uma condição de filtro para parar o laço(Tentei colocar o filter só com 'n<20' mas não deu certo). Achei algumas fontes falando que atualmente existe o método takeWhile(ConditionalOperator co), que nos permitiria usar somente 'n<20', porém não consegui usá-lo, provavelmente por que não atualizei o meu java.

    Desculpem-me se houver algum erro ou a implementação estiver um pouco porca, mas foi o conhecimento que consegui formular para poder responder essa questão. Quem puder adicionar mais cometários com certeza ajudará muito!

    Fontes:
    https://stackoverflow.com/questions/40358827/intstream-iterate-in-steps
    https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html
    https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html#iterate-int-java.util.function.IntUnaryOperator-
    http://www.deadcoderising.com/2015-05-19-java-8-replace-traditional-for-loops-with-intstreams/

  • Letra A. Não compila pois falta o ";" ao final da expressão. Lembrando que no JAVA 9 o IntStream.iterate pode receber 2 ou 3 parâmetros. Se tivesse o ";" ao final do código ele copilaria e mostraria "24816" no console.

     

    https://stackoverflow.com/questions/40358827/intstream-iterate-in-steps

  • Não achei "24816", então marquei que não compila.