请停止编写这么多的for循环!
在这篇文章中,我想和你一起回到基础知识,并讨论 Java 中的 for 循环。老实说,我正在为自己写这篇博客文章,因为我也会这样做。从 Java 8 开始,我们不必在 Java 中编写太多 for 循环!我希望这篇文章将使你的代码更易于阅读和编写。
你需要 for 循环做什么?
一般地说,for 循环执行两类任务:
- 遍历集合
- 运行算法
对于算法,for 循环可能是合适的。看一下此算法,检查数字是否为三的幂:
double number = 81; for(; number > 1; number /=3); return number == 1;
在这里,for 循环是合适的。这是一个非常简单的示例,你可以想象,使用更困难的算法会变得更加棘手。
对于大多数开发人员而言,在他们的日常工作中,这种情况很少。大多数时候,我们使用 for 循环遍历集合。让我们看一下该代码的一些示例。
遍历 Java 中的集合
我们首先来定义一个 List 数组,并往里面插入一些元素:
List<String> heroes = new ArrayList<>(); heroes.add("典韦"); heroes.add("云中君"); heroes.add("鲁班"); heroes.add("盘古"); heroes.add("大乔"); heroes.add("宫本武藏"); heroes.add("裴擒虎"); heroes.add("明世隐");
有很多方法可以对其进行迭代。让我们从相当古老的迭代器方法开始:
Iterator<String> heroesIterator = heroes.iterator(); while (heroesIterator.hasNext()) { System.out.println(heroesIterator.next()); }
这种代码使 Java 在冗长性上享有应有的声誉。
这次尝试使用经典的索引 for 循环:
for (int i = 0; i < heroes.size(); i++) { System.out.println(heroes.get(i)); }
嗯,这有点简单,但是在 Java 5 之后,我们可以这样处理循环:
for (String hero : heroes) { System.out.println(hero); }
这是大多数开发人员陷入困境的地方。这种结构非常熟悉并且易于遵循,以至于我们大多数人都不会去考虑更好的东西。但是在 Java 8 以后我们可以使用 forEach 函数来进行简化。
借助 Java 8,我们可以使用 forEach 函数:
heroes.forEach(hero -> System.out.println(hero));
我们可以进一步简化它:
heroes.forEach(System.out::println);
在我们只是迭代数组的元素时,这样会使代码很简洁。
下一步呢?使用 Java Streams
一旦停止在 Java 中编写如此多的 for 循环,forEach 就成为了你的第二选择,那么你应该看看 Java 中的 Streams。
例如,使用类似的语法,你可以轻松选择所有以 “鲁” 开头的英雄:
heroes.stream().filter(hero -> hero.startsWith("鲁")) .forEach(System.out::println);
运行结果会显示小短腿“鲁班”。
总结
停止编写太多 for 循环,完成后,Java 8 Streams 将自然而然地出现,你的代码将更易于阅读和编写。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何编写可怕的Java代码?
我决定告诉你如何编写可怕的Java代码。如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读。 如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 对一切使用异常 你知道循环对吗?差一错误(英语:Off-by-one error,缩写 OBOE,是在计数时由于边界条件判断失误导致结果多了一或少了一的错误,通常指计算机编程中循环多了一次或者少了一次的程序错误,属于逻辑错误的一种)很容易犯。当你迭代一个集合时,很容易出错。让我们看看如何使用 Java 异常处理来解决该问题,而不用担心这些讨厌的差一错误! public static void horribleIteration(String [] words){ int i = 0; try { while(true){ System.out.println(words[i]); i++; } } catch (IndexOutOfBoundsException e){ //iteration complete } } 不用担心访问修饰符 你说什么?Java 中的访问修饰符,这不是浪费时间嘛!你是否知道将属...
- 下一篇
泛型用的好,下班走得早
泛型方法和类允许程序员编写高级化的单个方法或类,以用于不同的类型。 泛型方法和类允许程序员编写高级化的单个方法或类,以用于不同的类型。 我们每天都在使用它们,例如List ,Stream ,Map … 泛型类是普通类,其类名后跟一个类型参数部分。这些类称为参数化类或参数化类型,因为它们接受一个或多个参数。 特征: 类型安全:泛型中只能容纳一种类型的对象。 不需要类型转换:无需类型转换对象。 编译时检查:在编译时进行检查,因此在运行时不会发生此问题。好的编程策略表明,在编译时处理问题比运行时要好得多。 类型参数命名约定: T type E element K Key N Number V value 泛型通配符: 我们知道 ? 是通配符,它表示任何类型。如果我们写<? extends Number>,我们接受Number的任何子类,例如Integer,Float和double。 我们可以使用通配符作为参数,字段,返回类型或局部变量的类型。但是,不允许将通配符用作泛型方法调用,泛型类实例创建或超类型的类型参数。 通用类示例: public class Response<T...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- Hadoop3单机部署,实现最简伪集群
- Docker安装Oracle12C,快速搭建Oracle学习环境