Java 8 Streams:简化“简单”的操作!

Java 8的Streams do deixam seucódigomais合法Ë概念,alémde poderem aumentar sua生产性 ao lidar com listasËcoleções. Aprenda agoraËaumente a 资格赛做seucódigo!

Loops tradicionais

Iterar Souma采集Java 5时代的来临复合体,semper aumenta一次极具挑战的机会虫子因斯佩拉多。 Lembremos:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 6, 3, 2, 1, 8, 5, 7, 4);
for (Iterator<Integer> numero = lista.iterator(); numero.hasNext();) {
    Integer integer = numero.next();
    System.out.print(integer);
}

Felizmente,Java 5的新成员每次,是因肤色而变的复合体:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 6, 3, 2, 1, 8, 5, 7, 4);
for (Integer numero : lista) {
    System.out.print(numero);
}

Apesar da nova s​​intaxe ter facilitado muito a vida de desenvolvedores java,ela aindanãotirouprovito daprogramaçãofuncional eéfortemente白茅。 没有Java 8 isso mudou补全。


Streams do Java 8

O Java 8 trouxe a criação de funções lambda. Se você ainda não está familiarizado com elas, pode conhecer mais clicando aqui. Com isso, foi possível criar uma nova forma de iterar sobre coleções, que é mais simples, concisa e ainda mais legível. Veja um exemplo simples, que faz o mesmo que os dois exemplos anteriores:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 6, 3, 2, 1, 8, 5, 7, 4);
lista.stream().forEach(System.out::print);

紫杉流德达多斯。 Neste caso,os dadossãoosnúmeros。 帕拉卡达um deleséchamada afunçãoSystem。out。print(。。。)Passando onúmerocomoparâmetro。 Aquitambémestamos utilizando a sintaxe de方法参考,请参阅推荐的电子邮件:System。out ::打印。


Operações intermediárias em Streams do Java 8

奥梅多每次acéuma que utilizamos歌剧最后,终奌站,pois depois dela nada mais pode ser feito。 Masvocêpode fazer muito mais com Streams do Java 8。 Vamos ver agora exemplos com中间歌剧。

Os métodos skip, limit e distinct

Vejamos o exemplo abaixo que filtra alguns结果由anante deapresentá-los提供。

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
lista.stream()
    .skip(2) // ignora os dois primeiros números
    .limit(9) // limita a 9 números
    .distinct() // ignora números iguais
    .forEach(System.out::print);

执行控制台和控制台的执行器:

8742315

Nesse exemplosãofeitasváriasOperações羚羊执行官每个:

  • Ø跳跃服务于无视X端。 Aigno ramramos o 1 e o 5。Ø限制通知tratar,这是不合法的部分。 阿奎·佩加莫斯(Aqui pegamos)8点5分。Ø不同éigual ao不同执行SQL:更改结果。 Para isso,ele utiliza ométodo等于dos objetos da lista。 重复2到8点。

O método filter

正如3封最热门的歌曲“ filtram”或​​nosso流,ou seja,无知阿尔贡元素。 主要需求个性化? 实用信息学过滤:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
lista.stream()
    .filter(e -> e % 2 == 0) // mantém apenas números pares
    .forEach(System.out::print); // imprime todos no console

O trecho decódigoacima produz a seguintesaída没有控制台:

842284

Perceba que ométodo过滤,nesse caso,estáfiltrando nosso stream para manter阿佩纳斯númerospares。 SEvocêaindanãoestá熟悉的com作为funçõeslambdas,雌蕊éseguinte:

Java 8: estrutura da função lambda. Primeiro temos os parâmetros da função, depois o arrow token, depois do corpo da função.

Ëstrutura da função lambda passada para o método filter

O método map

Caso sejanecessáriofazer uma转换流媒体的实用程序,实用程序地图。 Apesar do nome,elenãotemrelaçãocom接口地图。 Veja abaixo。

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
lista.stream()
    .map(e -> e * 2) // multiplica cada item por 2
    .forEach(e -> System.out.print(e + " ")); // imprime todos no console

一个没有控制台的游戏和一个游戏:

2 10 16 14 8 4 6 4 2 16 10 14 8

Perceba que todos osnúmerosforam multiplicados por 2 antes de serem apresentados没有控制台。 Porém,着名的公证人osnúmerosda lista Originalnãoforam alterados。 瓦塞贾(Ou seja),像变身一样地图阿佩塔姆·阿佩纳斯·瓦洛雷斯·塞拉索·帕萨多斯·弗朗特que流。 Issoéexcelente,pois semper quepossíveloÉéébalbalharmos com valores einstâncias意念。


Operações finais em Streams do Java 8

即时通讯的最终代言人每次。 Essaéuma dasOperações菲纳斯在Java 8中不使用API​​进行流式处理。在Java中使用流式处理方法。 Veremos agora超越歌剧菲纳斯杰拉尔门特河畔圣马蒂斯-杜奎乌每次。 Afinal发行了可用于流式传输的结果,并使用了合奏的结果。 Vejamos algumas possibilidades。

Os métodos max, min, count

Se Deseja pegar o主教o庄园瓦卢德波伊斯大剧院歌剧院,南美洲最高Ë分fasom exatamente isso。 Vejamos o最高:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
Optional<Integer> maiorNumero = lista.stream()
        .map(e -> e * 2) // multiplica cada item por 2
        .max(Comparator.naturalOrder()); // pega o maior item pela ordem natural
System.out.println(maiorNumero.get());

实用性最高énecessário信息通报como o流irá比较器东南欧 内塞·卡索,科莫整数já实现一个接口可比e ométodo相比于,elejápossui uma自然的que podemos utilizar,por isso usamosComparator.naturalOrder()。 Nesse exemplo onúmero16éimpresso no console,poiséo主教不得做任何事,不得做任何事。2。最后,énecessárioarmazenar o resultado em uma变种实用主义运动 梅斯莫尔·奥科雷·梅托多分:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
Optional<Integer> menorNumero = lista.stream()
        .map(e -> e * 2) // multiplica cada item por 2
        .min(Comparator.naturalOrder()); // pega o menor item pela ordem natural
System.out.println(menorNumero.get());

Seguindo a mesma ideia dométodo最高,示例2没有控制台。

波多黎各人计数雷托纳量子elementos restam没有流:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
Long quantidade = lista.stream()
        .filter(e -> e % 2 == 0) // mantém apenas números pares
        .count(); // pega quantos itens restam no stream
System.out.println(quantidade);

Nesse exemplo asaídano consoleserá6,例如Quantumade denúmeros不间断。

O método collect

墨西哥歌剧院的最终结局和最佳实践收藏。 Eleéforma mais个性化Stream的结果。 波特罪恶实用格式杂志,艺术专刊。 佩剑军团Compartilhar,ésóme seguir,os linksestãono最后 deste artigo. Por enquanto vejamos alguns exemplos básicos com 收藏.

求职者apenas coletar o resultadoEMuma新星利斯塔,利用um收集器执行者EMCollectors.toList():

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
List<Integer> novaLista = lista.stream()
        .filter(e -> e % 2 == 0) // mantém apenas números pares
        .map(e -> e * 2) // multiplica cada item por 2
        .collect(Collectors.toList()); // coleta todos os itens em uma nova lista
System.out.println(novaLista);

内塞范例菲特拉莫斯apenas osnúmerospares,多倍体待办事项por 2 eColetamosØ结果乌玛新星名单。 一个没有控制台的é:

[16, 8, 4, 4, 16, 8]

卡索奎拉阿格鲁帕列表中的列表麻婆,利用收藏家Collectors.groupingBy(...):

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
Map<Boolean, List<Integer>> mapa = lista.stream()
        .map(e -> e * 2) // multiplica cada item por 2
        .collect(Collectors.groupingBy(e -> e > 8)); // agrupa itens baseado no resultado da comparação
System.out.println(mapa);

雀巢示例花多倍体todos os itens do stream por 2,e depois阿格鲁帕莫斯Emnúmeros迈奥雷斯que 8 e原始的a 8. Veja como fica o麻婆ao ser impresso没有控制台:

{false=[2, 8, 4, 6, 4, 2, 8], true=[10, 16, 14, 16, 10, 14]}

E caso queira gerar 乌玛única琴弦分流,收集器使用Collectors.joining(...)阙恩可变字符串乌玛所以:

List<Integer> lista = Arrays.asList(1, 5, 8, 7, 4, 2, 3, 2, 1, 8, 5, 7, 4);
String stringUnica = lista.stream()
        .map(String::valueOf) // transforma cada item em String
        .collect(Collectors.joining(";")); // junta todas as Strings em uma única separada por ';'
System.out.println(stringUnica);

阿奎变形虫cadanúmeroem uma字符串utilizando String.valueOf(…)。 德波瓦阿格鲁帕莫斯todos em umaúnicastring separando os elementos por蓬托维古拉。 Saídano consoleéseguinte字符串:

1;5;8;7;4;2;3;2;1;8;5;7;4

Parando de usar ‘for’ e ‘while’

Utilizando Streams做Java 8,需要一些支持循环浏览诺曼特,科莫对于,而oudo...而。 API de stream utiliza循环隐含,tira proveito da 程序功能,e deixa seu código muito mais 合法Ë概念. Além disso,em um próximo artigo mostrarei como você pode 伞形虫 a execução de um stream de 对于ma muito 简单!

Apesar de termos apresentado stream apenas a partir de列表,épossívelcriá-losde瓦里亚斯傲视群雄! Veja:

  • 德姆数组utilizandoArrays。流(Object []);德梅斯托多斯班级流,comoStream。of(Object []),IntStream。range(int,int);如利纳斯德姆ArquivoObemidas公司BufferedReader。lines();流德Arquivos海军上将海军航空母舰档案;流德númerosaleatóriosObdidos emRandom。ints()。

抛物线! 阿哥拉vocêConhece melhor API de流执行Java 8!Vocêpode utilizar esse conhecimento para恩特雷加没有普拉佐解决方案阿尔塔赛马。

Quer entender um pouco mais sobre funções lambda e sua estrutura? Veja esse artigo para entender facilmente a estrutura de funções lambda.

Quer receber minhas melhores dicas para escrever código de alta qualidade e entregar projetos no prazo? Então acesse aqui.

Quer aprender a melhorar seu código diariamente? Então me segue no twitter : https://twitter.com/rinaldodev

Evocê?阿尔古姆·科迪戈(Játeve que dar darmanutençãoem)流? Lembra desituaçõesem quevocê poderia ter utilizado 流? Deixe um 评论!

Gostou做que aprendeu? 不提供任何WhatsApp即可解决社会问题!

O post Java 8 Streams: Pare de usar ‘for’ e simplifique seu código! apareceu primeiro em rinaldo.dev.

from: https://dev.to//rinaldodev/java-8-streams-pare-de-usar-for-e-simplifique-seu-codigo-4df8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值