利用这2个概念,快速从Java的初学者到中级者!

85 阅读3分钟

在10分钟内掌握Java的技能

图片由作者提供

这篇博客解释了两个重要的概念,对新手和中级Java工程师都有帮助。如果你是一个希望提升自己的Java知识的前端工程师,或者是对Java或Spring boot比较陌生的人,请继续阅读,了解有史以来最常用和最有用的概念之一。这将使你从写长长的风马牛不相及的方法转变为容易阅读的浓缩方法,并使你为自己是一名工程师而感到自豪。

工程师们喜欢他们的代码能与读者如此美妙地对话,而这正是你采用这一技术所要达到的目的。你的代码将是如此可读,以至于它能表达出其存在的意图,而不是内部机制(......和琐碎的细节

学习1:Lambda表达式

你有没有想过,当你需要遍历一个List这样的集合时?

在此之前,所涉及的步骤。

  1. 抓住List的迭代器(对于我们这里的代码例子,设想一个定义为List的fruitBasket
  2. 启动一个for循环或while循环,用一个条件来检查迭代器 是否指向最后一个水果
  3. 打印出水果的名称
  4. 将迭代器指向下一个水果
  5. 回到for循环中去
Iterator listIterator = fruitBasket.iterator();

现在,想象一下,你可以把上面的4行减少到1行......而且不需要明确使用迭代器。Lambda表达式正是这样做的。在下面的例子中,forEach方法抽象出了明确打开forLoop的需要。->操作符,指示编译器,它后面的内容是一个方法体,需要为每个水果执行。

fruitBasket.forEach(fruit -> System.out.println(fruit));

学习 2: Java流

上面介绍的Lambda表达式只是真正游戏的热身赛--Java流。

在这个时代,数据无处不在。十有八九,你会遇到对大量数据集合进行数据操作的要求,这些数据通常被伪装成一个List,或者一个HashMap

从我们之前的例子来看,比方说,现在你想如果你的水果篮中含有草莓

fruitBasket = [“Apple”, “Orange”, “Mango”, “Strawberry”, “Mango”, “Apple”]

以前,如果没有Java Stream,你会写这样的东西

public List<Fruit> searchFruitBasket(List<Fruit> fruitBasket, String searchFruit) {

但有了Java Stream集合,你只需写两行代码,就可以绕过创建临时的垃圾收集器变量,如本例中发现的水果。

public List<Fruit> searchFruitBasket(List<Fruit> fruitBasket, String searchFruit) {

这里的流有一个lambda表达式(见下文),它被应用于流的每个对象。

f -> f.getName().equals(searchFruit)

所以现在让我们来分解代码中的新函数。

  1. stream()。这个方法,在引擎盖下,将水果列表作为一个元素序列提供给一个流(在引擎盖下实例化,从编码者那里抽象出来)。
  2. filter()。这是一个聚合运算符,我们应用于流中的每个元素。对于每个元素f,我们检查它的名字是否与我们要搜索的水果相同。如果是真的,则保留该元素,如果是假的,则将该元素从列表中删除。正如你所知道的,布尔检查被抽象化了,由引擎盖下的流来执行。
  3. collect()。这是最关键的方法。在编译器看到collect方法之前,上述的计算都不会完成。

这篇文章在这里向你介绍了**Java中的两个重要概念。**有很多有趣的事情可以用流来做。请看我的下一篇文章,深入了解Java Streams。


用这2个概念快速从Java的初学者到中级者》最初发表在Medium上的Javarevisited上,人们在这里通过强调和回应这个故事来继续对话。