你还在Java8中使用循环语句吗?

Java中跳出嵌套循环的方法 在Java编程中,我们经常会遇到嵌套循环的情况。当满足特定条件时,我们可能需要跳出整个嵌套循环结构。然而,普通的break语句只能跳出当前所在的内层循环,无法直接跳出外层循环。因此,需要一些特殊的技巧来实现跳出嵌套循环的需求。 阅读详情

Java 8中的新功能特性改变了游戏规则。对Java开发者来说这是一个全新的世界,并且是时候去适应它了。

在这篇文章里,我们将会去了解传统循环的一些替代方案。在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么,而不是要怎样做。这正是循环的不足之处。要确保循环的灵活性是需要付出代价的。return、break 或者 continue都会显著地改变循环的实际表现。这迫使我们不仅要清楚我们要实现怎样的代码,还要了解循环是怎样工作的。

现在我们看看怎样把这些循环转换为更简洁,可读性更高的代码。

代码转换

好吧,讲的够多了,是时候展示一些例子了!

这次我们要以文章为例子。一篇文章拥有一个标题,一个作者和几个标签。

private class Article {

    private final String title;

    private final String author;

    private final List tags;

    private Article(String title, String author, List tags) {

        this.title = title;

        this.author = author;

        this.tags = tags;

    }

    public String getTitle() {

        return title;

    }

    public String getAuthor() {

        return author;

    }

    public List getTags() {

        return tags;

    }

}

每个例子都会包含一个使用传统循环的方案和一个使用Java 8新特性的方案。

在第一个例子里,我们要在集合中查找包含“Java”标签的第一篇文章。

看一下使用for循环的解决方案。

public Article getFirstJavaArticle() {

    for (Article article : articles) {

        if (article.getTags().contains("Java")) {

            return article;

        }

    }

    return null;

}

现在我们使用Stream API的相关操作来解决这个问题。

public Optional getFirstJavaArticle() {  

return articles.stream()

    .filter(article -> article.getTags().contains("Java"))

    .findFirst();

}

是不是很酷?我们首先使用 filter 操作去找到所有包含Java标签的文章,然后使用 findFirst() 操作去获取第一次出现的文章。因为Stream是“延迟计算”(lazy)的并且filter返回一个流对象,所以这个方法仅在找到第一个匹配元素时才会处理元素。

现在,让我们获取所有匹配的元素而不是仅获取第一个。

首先使用for循环方案。

public List getAllJavaArticles() {

    List result = new ArrayList<>();

    for (Article article : articles) {

        if (article.getTags().contains("Java")) {

            result.add(article);

        }

    }

    return result;

}

使用Stream操作的方案。

public List getAllJavaArticles() {  

    return articles.stream()

        .filter(article -> article.getTags().contains("Java"))

        .collect(Collectors.toList());

    }

在这个例子里我们使用 collection 操作在返回流上执行少量代码而不是手动声明一个集合并显式地添加匹配的文章到集合里。

到目前为止还不错。是时候举一些突出Stream API强大的例子了。

根据作者来把所有的文章分组。

照旧,我们使用循环方案。

public Map> groupByAuthor() {

    Map> result = new HashMap<>();

    for (Article article : articles) {

        if (result.containsKey(article.getAuthor())) {

            result.get(article.getAuthor()).add(article);

        } else {

            ArrayList articles = new ArrayList<>();

            articles.add(article);

            result.put(article.getAuthor(), articles);

        }

    }

    return result;

}

我们能否找到一个使用流操作的简洁方案来解决这个问题?

public Map> groupByAuthor() {  

    return articles.stream()

        .collect(Collectors.groupingBy(Article::getAuthor));

}

很好!使用 groupingBy 操作和 getAuthor 方法,我们得到了更简洁、可读性更高的代码。

现在,我们查找集合中所有不同的标签。

我们从使用循环的例子开始。

public Set getDistinctTags() {

    Set result = new HashSet<>();

    for (Article article : articles) {

        result.addAll(article.getTags());

    }

    return result;

}

好,我们来看看如何使用Stream操作来解决这个问题。

public Set getDistinctTags() {  

    return articles.stream()

        .flatMap(article -> article.getTags().stream())

        .collect(Collectors.toSet());

}

棒极了!flatmap 帮我把标签列表转为一个返回流,然后我们使用 collect 创建了一个集合作为返回值。

以上的就是如何使用可读性更高的代码代替循环的例子。很高兴您能够用心读完,希望对您有所帮助。

Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费学习加群:835638062 点击链接加入群聊【Java高级架构】:https://jq.qq.com/?_wv=1027&k=5S3kL3v

详解vit_base_patch16_224 ViT-Base模型的核心思想是将输入图像划分为多个小块(patches),并使用Transformer架构来处理这些小块。具体来说,ViT-Base使用16x16像素的patch大小,输入图像的尺寸为224x224像素,这意味着每张图像将被划分为49个patch(22416×22416=14×14=19616224​×16224​=14×14=196个patch)。ViT-Base(ViT-B/16)通过将图像处理任务转化为序列处理任务。 阅读详情

相关推荐

SSCardDriver.dll社会保障卡读写终端接口规范38号文接口

********************获取设备及PSAM卡信息********************//********************获取银行账户信息 ********************//********************获取设备信息********************//********************PIN校验********************//********************通用写卡********************/

广东东信智能科技有限公司的专栏 1746

Java8flatMap在简单应用,以及遍历循环体内接收数据对象new的思考。

PageList<CouponExcitingActivity>modelPageList = iCouponExcitingActivityService ...

498

保姆级教程:用Wireshark抓包分析10M汽车以太网PLCA轮询机制(附pcap文件)

本文详细介绍了10M汽车以太网PLCA轮询机制的抓包分析与性能优化方法。通过Wireshark实战教程,解析PLCA协议的时分多址特性、总线型拓扑结构及带宽优化策略,帮助工程师提升车内网络的可靠性和实时性。附赠pcap文件供实践参考。

wdx01234567的博客 240

从”JAVA“而终 8:java循环判断语句讲解

有了前面的数组讲解,我们可以在一个数组里面添加很多个元素,也可以把它们挨个的取出来使用,但是怎样实现动态的添加和取出呢?这就要用到循环了,让计算机循环的去存取。另外,这里也讲解一下判断语句。 首先是判断语句,如果你学习过其他的语言,那么这里对你而言就太简单了!一般而言程序的结构可以大致分为以下三种:顺序结构、选择结构、循环结构。它们的实现就是靠判断语句来实现,我们只需要掌握以下四个知识点就可以很

流年少年 2411

保姆级教学,教你在vscode和cursor上调试matlab!!!

保姆级教你如何在vscode或者cursor上面调试matlab

yang_upup的博客 2084

SPI 总线信号完整性与时序一致性测试

SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性

硬核科技 330

java有几个循环语句,你还在Java8中使用循环语句吗?

Java 8中的新功能特性改变了游戏规则。对Java开发者来说这是一个全新的世界,并且是时候去适应它了。在这篇文章里,我们将会去了解传统循环的一些替代方案。在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么,而不是要怎样做。这正是循环的不足之处。要确保循环的灵活性是需要付出代价的。return、break 或者 continue都会显著地改变循环的实际表现。这迫使我们不仅要...

weixin_28728265的博客 117

基于Matlab的深度学习OFDM系统信号检测

在接收端,我们首先去除循环前缀,然后对接收到的信号进行FFT变换和QAM解调。在通信系统中,正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)是一种常用的调制技术,它可以将高速数据流分成若干个低速子载波进行传输,提高了信道利用率和抗干扰性能。接下来,我们使用训练好的神经网络对QAM调制后的数据进行检测,得到估计的FFT变换结果。深度学习方法可以通过大量的训练数据来学习信号的特征,并具有一定的适应能力,在某些情况下可能能够获得更好的检测性能。

2301_79325657的博客 296

java8循环_Java8里请不要再使用循环语句

正如我之前所写的,Java 8中的新功能特性改变了游戏规则。对Java开发者来说这是一个全新的世界,并且是时候去适应它了。在这篇文章里,我们将会去了解传统循环的一些替代方案。在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么而不是要怎样做。这正是循环的不足之处。要确保循环的灵活性是需要付出代价的。return、break 或者 continue都会显著地改变循环的实际表现。...

weixin_39738152的博客 288

HTML金色流星雨(完整代码)

HTML实现金色流星雨动态效果的完整代码。

AIGC 994

视觉SLAM十四讲slambook2示例代码所有依赖库的编译安装教程(VTK、OpenCV3、ceres、Sophus、g2o、Eigen、Pangolin、googletest等)

这是2021年的最后一篇博客~ 新年快乐! 0 准备工作   首先需要先安装cmake编译器: sudo apt-get install cmake   以及,将十四讲的示例代码克隆下来(十四讲的源码地址点击这里): git clone --recursive https://github.com/gaoxiang12/slambook2.git   由于里面的3rdparty文件夹内所有内容都来自于其他github仓库,所以需要加上--recursive参数,不然克隆下来的内容不完整。   如果你.

zeeq的博客 7839

Java8里请不要再使用循环语句

正如我之前所写的,Java 8中的新功能特性改变了游戏规则。对Java开发者来说这是一个全新的世界,并且是时候去适应它了。 在这篇文章里,我们将会去了解传统循环的一些替代方案。在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么而不是要怎样做。这正是循环的不足之处。要确保循环的灵活性是需要付出代价的。return、break 或者 continue都会显著地改变循环

Think 1689

SD卡烧写Linux kernel——SD卡分区,并烧写uboot,kernel,DTB及filesystem

Linux Ubuntu环境下对SD卡分区(烧写uboot,kernel,及filesystem) 介绍dd命令的使用,SD卡分区、格式化、复制文件等 fdisk命令

weixin_42408707的博客 5057

Java 编写应用程序,使用for循环语句计算8+88+888…前10项之和。

public class Example1_5 { public static void main(String args[]) { long sum=8,c=8; for(int i=1;i<10;i++){ c=c*10+8; sum=sum+c; } System.out.print...

qq_43536373的博客 8868

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java用foreach循环map_Java 8 forEach循环一个List和Map

在这篇文章中,我将向您展示如何用新的Java 8 forEach语句循环一个List和Map。1、forEach 和 Map1.1、常规循环Map常用的方法。Map items = new HashMap<>();items.put("A",10);items.put("B",20);items.put("C",30);items.put("D",40);items.put("E",5...

weixin_35025310的博客 543

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Java基础】for循环语句

Java 中的for传统for循环:适用于需要精确控制循环变量的场景。增强型for循环:适用于遍历数组或集合。嵌套for循环:适用于处理多维数据或复杂逻辑。无限for循环:需要结合break语句退出。forEach方法:适用于集合和流,结合 Lambda 表达式使代码更简洁。

GM_115的博客 728

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java8 entryset_Java8中forEach语句循环一个List和Map

在这篇文章中,我将向您展示如何用新的Java 8 forEach语句循环一个List和Map。1、forEach 和 Map1.1、常规循环Map常用的方法。Map items = new HashMap<>();items.put("A",10);items.put("B",20);items.put("C",30);items.put("D",40);items.put("E",5...

weixin_42512841的博客 1170

Java8 forEach 使用

Java8 forEach 使用 java 发布于 2019-08-22 引言 在本文中,我们将向您展示如何使用新的java 8 foreach语句循环List和Map。 ############################################################ For-Each循环也叫增强型的for循环,或者叫foreach循环...

AcceptedLin的博客 7156

Java-for循环、for-each、forEach()中的break、continue、return;

语句 普通for循环 for-each Java8-forEach return 跳出循环,直接返回方法 跳出循环,直接返回方法 跳过当前元素,继续执行循环 break 跳出循环,继续执行方法 跳出循环,继续执行方法 不可用 continue 跳过当前元素,继续执行循环 跳过当前元素,继续执行循环 不可用 Java-for循环 return:跳出循环,直接返回方法 List<Integer> integers = new ArrayList<>(); ...

藿香正气的博客 6091

Java 2 实用教程 - 循环语句

1.for循环语句 格式: for(表达式1;表达式2;表达式3){ 若干语句; } 运行流程:表达式1-表达式2-若干语句-表达式3 注意: 表达式2是一个求值的boolean型数据的表达式 for语句的{}可以省略,最好不要,若干语句不只一句时,执行for语句时,若干语句中只会执行第一句,就跳转到表达式三 举例:计算8+88+888+···的前十二项和 public class Hello1 { ​ public static void main(String[

weixin_57689217的博客 295

Java 8 跳出foreach循环,跳出本次循环,继续执行,之前的for each循环如何跳出本次循环,跳出循环,跳出多层for循环。

在Java8之前,最开始使用for i 循环,很老旧, 后来有了高级的for each 循环,然后这个跳出本次循环和跳出所有的for循环,都简单,稍微没见过的就是跳出多层for循环。 然后就是Java8出的foreach循环,这个循环里面,break和continue都不管用啦。 需要使用return,这个只能跳过本次循环,还是会继续执行for循环的。 那么怎么跳出这个Java8的fore...

请叫我大师兄 4万+

java循环语句三角形_JAVA——程序流程控制——循环语句——for循环(打印三角形)...

//要求;用*打印出一个直角三角形。高8*。public class zhijiaosanjiaoxing {public static void main(String[] args) {for(int i=0;i<8;i++){for(int k=0;kSystem.out.print("*");}System.out.println();}}}// 要求用*打印一个等腰三角形。pub...

weixin_36070998的博客 232

计算8+88+888+…前10项之和编写应用程序,使用for循环语句计算8+88+888+…前10项之和。(java)

public class Main{ public static void main(String[] args) { long num1 = 8,num2 = 8,num = 8; for(int i = 0;i<9;i++) { num1 = 8 + num1*10; num = num + num1; } System.out.printf("%d",num); } }

C_jiuli的博客 2508

java foreach 中止_Java8中的foreach跳出循环break/return

java8中跳出循环不能使用break?通过测试发现:对于java8中的特殊写法lamada表达式中,不能使用break,会提示错误;java8中使用return,会跳出当前循环,继续下一次循环,作用类似continue;java8中使用foreach,但是不是lamada表达式写法,可以正常使用break或者return,可以直接跳出循环.public class TestForEachJava...

weixin_36145472的博客 531

Java 结束循环

开发工具与关键技术:Myeclipse 10,Java 作者:刘俊杰 撰写时间:2019年04月24日 Break控制循环 在任何循环语句的主体部分,均可用break控制循环的流程。break用于强制退出循环,不执行循环中剩余的语句。(break语句还可用与多支语句switch中)。 下面是break的实例 例题:随机生成0-10的数,如果随机数是8的话就停止循环 上图中我们看到写了一个while循环语句,在循环中随机生成0-10的数值,如果数值为8的话就停止循环。 输出的结果: Continue终止某

m0_67391401的博客 759
上一篇: java消息队列ActiveMQ的简单使用
下一篇: 大型分布式系统中的缓存架构
普通网友
博客等级 码龄8年 55粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值