Buscar

Java Avançado Manipulando Coleções com a Stream API

Prévia do material em texto

Java Avançado
Avaliação
Parte superior do formulário
1) Quais dos métodos listados abaixo são utilizados para obter, a partir de uma coleção do Java, uma instância de Stream<T>?
* Marque todas as alternativas que respondem o enunciado da questão
	
	toStream() (alternativa incorreta)
	
	parallelStream() (alternativa correta)
	
	stream() (alternativa correta)
	
	createStream() (alternativa incorreta)
	
	getStream() (alternativa incorreta)
	
	Resposta incorreta!
As coleções possuem os métodos stream() e parallelStream() para esta finalidade. A diferença entre eles é que o ultimo retorna uma stream paralela.
2) Considere o código abaixo como válido. Ele é responsável por arredondar os valores da lista, retornando uma nova lista de elementos do tipo Long. Quais códigos apresentados nas alternativas abaixo pode substituir o código da linha 3 mantendo o mesmo funcionamento do código original?
* Marque todas as alternativas que respondem o enunciado da questão
	1
	List<Double> list1 = Arrays.asList(10.5, 3.2, 4.6);
	2
	List<Long> list2 = list1.stream()
	3
	  .mapToLong(n -> (long) (n + 0.5))
	4
	  .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
	
	.mapToLong(e -> round()) (alternativa incorreta)
	
	.mapToLong(Math::round) (alternativa correta)
	
	Não é possível substituir o código por outro equivalente (alternativa incorreta)
	
	.map(e -> Math.round(e)) (alternativa correta)
	
	.mapToInt(Math::round) (alternativa incorreta)
	
	Resposta incorreta!
Na linha 3, o código original implementa um mecanismo de arredondamento próprio. No entanto, existe no Java o método Math.round(), que já implementa uma lógica de arredondamento e que pode ser usado em substituição. Existem duas formas de fazer esta troca. A primeira é chamando o método dentro do corpo da expressão lambda: e -> Math.round(e). E a segunda é referenciando o método diretamente: Math::round.
3) Suponha que você tem uma lista de alimentos e deseja obter uma nova lista com o preço de cada alimento. Quais operações em streams listadas abaixo você vai precisar para atingir este objetivo?
* Marque todas as alternativas que respondem o enunciado da questão
	
	limit() (alternativa incorreta)
	
	filter() (alternativa incorreta)
	
	collect() (alternativa correta)
	
	map() (alternativa correta)
	
	count() (alternativa incorreta)
	
	Resposta incorreta!
Primeiramente você precisará de uma operação map() para converter cada alimento no seu preço correspondente. Depois você precisará de uma operação collect() para gerar uma nova lista com os preços.
4) Considere o código abaixo. Qual será o resultado armazenado na lista referenciada pela variável list2 quando ele for executado?
	1
	List<Double> list1 = Arrays.asList(53.2, 98.0, 33.5, 47.8);
	2
	List<Double> list2 = list1.stream()
	3
	  .sorted((x, y) -> -x.compareTo(y))
	4
	  .collect(Collectors.toList());
	
	Uma lista com os mesmos elementos de list1 ordenados em ordem decrescente. (alternativa correta)
	
	Uma lista com os mesmos elementos de list1 ordenados em ordem crescente. (alternativa incorreta)
	
	Uma lista com os mesmos elementos e mesma ordem definida em list1. (alternativa incorreta)
	
	Uma lista vazia. (alternativa incorreta)
	
	Uma lista com apenas os elementos maiores do que 50. (alternativa incorreta)
	
	Resposta incorreta!
A operação sorted() ordena a lista de acordo com algum critério. O critério utilizado neste código (Comparator<T>) usa o método compareTo() do tipo Double para fazer a ordenação. Este método faz a ordenação em ordem crescente, mas a expressão lambda nega o valor retornado pelo método através do operador de subtração. Portanto, a ordem da lista acaba ficando invertida, decrescente.
5) Suponha que você queira contar os elementos presentes em uma stream. Qual operação terminal você pode usar para esta finalidade?
	
	length() (alternativa incorreta)
	
	count() (alternativa correta)
	
	collect() (alternativa incorreta)
	
	min() (alternativa incorreta)
	
	map() (alternativa incorreta)
	
	Resposta correta!
A operação a ser utilizada neste caso é a count(). A operação length() não existe; min() retorna o menor valor (e não a contagem); e as outras operações são intermediárias.
Java Avançado
Avaliação
Parte superior do formulário
1) Quais dos métodos listados abaixo são utilizados para obter, a partir de uma coleção do Java, uma instância de Stream<T>?
* Marque todas as alternativas que respondem o enunciado da questão
	
	parallelStream() (alternativa correta)
	
	createStream() (alternativa incorreta)
	
	toStream() (alternativa incorreta)
	
	stream() (alternativa correta)
	
	getStream() (alternativa incorreta)
	
	Resposta correta!
As coleções possuem os métodos stream() e parallelStream() para esta finalidade. A diferença entre eles é que o ultimo retorna uma stream paralela.
2) Suponha que você tem uma lista de alimentos e deseja obter uma nova lista com o preço de cada alimento. Quais operações em streams listadas abaixo você vai precisar para atingir este objetivo?
* Marque todas as alternativas que respondem o enunciado da questão
	
	collect() (alternativa correta)
	
	count() (alternativa incorreta)
	
	limit() (alternativa incorreta)
	
	filter() (alternativa incorreta)
	
	map() (alternativa correta)
	
	Resposta correta!
Primeiramente você precisará de uma operação map() para converter cada alimento no seu preço correspondente. Depois você precisará de uma operação collect() para gerar uma nova lista com os preços.
3) Considere o código abaixo como válido. Ele é responsável por arredondar os valores da lista, retornando uma nova lista de elementos do tipo Long. Quais códigos apresentados nas alternativas abaixo pode substituir o código da linha 3 mantendo o mesmo funcionamento do código original?
* Marque todas as alternativas que respondem o enunciado da questão
	1
	List<Double> list1 = Arrays.asList(10.5, 3.2, 4.6);
	2
	List<Long> list2 = list1.stream()
	3
	  .mapToLong(n -> (long) (n + 0.5))
	4
	  .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
	
	.map(e -> Math.round(e)) (alternativa correta)
	
	.mapToLong(Math::round) (alternativa correta)
	
	Não é possível substituir o código por outro equivalente (alternativa incorreta)
	
	.mapToLong(e -> round()) (alternativa incorreta)
	
	.mapToInt(Math::round) (alternativa incorreta)
	
	Resposta correta!
Na linha 3, o código original implementa um mecanismo de arredondamento próprio. No entanto, existe no Java o método Math.round(), que já implementa uma lógica de arredondamento e que pode ser usado em substituição. Existem duas formas de fazer esta troca. A primeira é chamando o método dentro do corpo da expressão lambda: e -> Math.round(e). E a segunda é referenciando o método diretamente: Math::round.
4) Quais das alternativas abaixo representam operações terminais em streams?
* Marque todas as alternativas que respondem o enunciado da questão
	
	limit() (alternativa incorreta)
	
	collect() (alternativa correta)
	
	count() (alternativa correta)
	
	distinct() (alternativa incorreta)
	
	filter() (alternativa incorreta)
	
	Resposta correta!
Dentre as operações listadas, apenas collect() e count() são terminais. As outras são operações intermediárias.
5) Quais das alternativas abaixo representam operações intermediárias em streams?
* Marque todas as alternativas que respondem o enunciado da questão
	
	sorted() (alternativa correta)
	
	reduce() (alternativa incorreta)
	
	count() (alternativa incorreta)
	
	collect() (alternativa incorreta)
	
	filter() (alternativa correta)
	
	Resposta correta!
Dentre as operações listadas, apenas filter() e sorted() são intermediárias, isto é, retornam uma nova stream. As outras sãooperações terminais.
Parte inferior do formulário
Parte inferior do formulário

Continue navegando