leandromoraesrj / sincad-backend

PROJETO BASE DE EXEMPLO USANDO AS MELHORES PRATICAS DE DESENVOLVIMENTO
0 stars 0 forks source link

Usando IF, Lambda(Arrow function), forEach, Optional, reference method, stream e Array.asList #11

Open leandromoraesrj opened 2 years ago

leandromoraesrj commented 2 years ago
leandromoraesrj commented 2 years ago

for percorrendo os itens da lista usando quando há a necessidade de saber em qual posição está: for(int i=0;i<contatos.size();i++){ System.out.println(contatos.get(i).getNome()); }

Percorrendo um for no java 6-:

for (String item : someList) {
    System.out.println(item);
}

Convertendo um Iterator em um ArrayList: StreamSupport.stream(service.buscar().spliterator(), false).collect(Collectors.toList());

Convertendo Map para Array:

Map<Integer, String> sourceMap = null;
String[] targetArray = sourceMap.values().toArray(new String[0]);

Convertendo Long para Inteiro e vice-versa:

Integer i = theLong.intValue();
Long.valueOf(i);

Convertendo um ArrayList em um Array;

List<MapSqlParameterSource> params = new ArrayList<MapSqlParameterSource>();
params.toArray(new MapSqlParameterSource[params.size()]);

ou
//Não funciona no java 8
List<MapSqlParameterSource> params = new ArrayList<MapSqlParameterSource>();
params.toArray(MapSqlParameterSource[]::new)

ou
List<MapSqlParameterSource> params = new ArrayList<MapSqlParameterSource>();
params.stream().toArray(n -> new MapSqlParameterSource[n]);

ou

List<MapSqlParameterSource> params = new ArrayList<MapSqlParameterSource>();
params.stream().toArray(MapSqlParameterSource[]::new);

forEach percorrendo os itens da lista usando reference method: lista.forEach(System.out::println); OBS:é só uma forma mais elegante e enxuta de se escrever uma expressão lambda cuja única tarefa é de invocar um método.

forEach percorrendo os itens da lista usando Lambda:

lista.forEach(n -> {
    logger.info(n.getNome());
     }
);

ou

lista.forEach(n -> logger.info(n.getNome()));

ou em caso de Map

lista.forEach((k, v) -> logger.info("Key : " + k + ", Value : " + v));

ArraysList usando addAll com Array.asList: lista.addAll(Arrays.asList(new RegimeApuracao(), new RegimeApuracao()));

HashSet com Array.asList: estab1.setTiposUnidadeEstabelecimento(new HashSet<TipoUnidadeEstabelecimento>(Arrays.asList(tipoUnidade)));

stream funciona semelhante a uma query, você pode colocar limit, distinct, filter, order e converter para uma List e Map: Stream<String> stream = pessoas.stream().filter(pessoa -> pessoa.getNacionalidade().equals("Brasil").sorted(Comparator.comparing(Pessoa::getNome));

Stream<String> stream = pessoas.stream().distinct();

regimes.stream().map(UnidadeEmpresarialDTO::new).collect(Collectors.toList());

Exemplo de unique/distinct para um atributo de uma classe:

Collection<ContribuinteVO> uniqContribuinte = mapExercicioContribuinte.get(n).stream()
                    .collect(Collectors.toMap(ContribuinteVO::getNome, Function.identity(),
                            (contribuinteVO1, contribuinteVO2) -> contribuinteVO1)).values();

Exemplo de sort para um atributo de uma classe:

List<ContribuinteVO> sortedList = listaContribuintes.stream()
        .sorted(Comparator.comparing(ContribuinteVO::getNome))
        .collect(Collectors.toList());

sortedList.stream().forEach(c -> {
}

mais conteúdo explicando sort, consumer etc https://www.alura.com.br/conteudo/java8-lambdas?gclid=Cj0KCQiApL2QBhC8ARIsAGMm-KENUCBNnZXOG5jsCjY4S9LfcTN6SuyvMhjNkqOzmUJDQyB_nZx2z7EaAiqGEALw_wcB

isEmpty usado ao obter uma List:

regimeService.deleteTodos();
List<RegimeApuracao> regimes = regimeService.listarTodos();

if (!regimes.isEmpty()) logger.info(regimes.toString());    
else logger.info("Nenhum Regime de Apuração Encontrado!");

orElse usado para obter um Optional:

RegimeApuracao regime3 = regimeService.obterPorCodigo(0).orElse(null);
if (regime3 != null) logger.info(regime3.toString());

No Java 8 incluíram o container "Opcional" que carregará o objeto(via generics) instanciado ou null. Esse recurso vai te ajudar a diminuir a quantidade de NullPointerException na sua aplicação/API por causa da possibilidade de trabalhar com objetos sem valor. Exemplo:

Opcional p = em.findById(1); 
return p.orElse(null); 

Não é possível usar Optional com List;

Mais conteúdo sobre Optional https://imasters.com.br/back-end/como-usar-o-optional-do-java-8-com-jpa-hibernate

Verificar a diferença em objeto e tipo primitivo O == do Java compara referências de memória ao invés de comparar o texto armazenado no objeto. Quando usamos tipos primitivos (int, double, boolean, etc.) ele se comporta sempre como o esperado, mas com objetos (wrappers) como String, Integer, Long etc, deve-se usar o "equals" e SOMENTE, quando não estiver null. Outra opção é instanciar como Optional:

Optional<String> linha = Optional.ofNullable(reader.readLine()));

if (linha.isPresent()) String raizCnpj = linha.get().substring(0, 8);

Usar % para comparação linhas.size() % maxQuantidadeLinhaLidas == 0

Usar ? 0:1 para comparação int teste = (1 == 2 ? 0:1);