java集合提取最小的日期
我们都广泛使用了Collection类,例如List,Map及其派生版本。 每次使用它们时,我们都必须遍历它们以找到某个元素或更新这些元素,或者找到匹配某个条件的不同元素。 考虑如下所示的人员列表:
List<Person> personList = new ArrayList<>();
personList.add(new Person('Virat', 'Kohli',22));
personList.add(new Person('Arun', 'Kumar',25));
personList.add(new Person('Rajesh', 'Mohan', 32));
personList.add(new Person('Rahul', 'Dravid', 35));
为了找出年龄大于30岁的所有Person实例,我们可以这样做:
List<Person> olderThan30OldWay = new ArrayList<>();
for ( Person p : personList){if ( p.age >= 30){olderThan30OldWay.add(p);}
}
System.out.println(olderThan30OldWay);
这给了我输出为:
[Rajesh Mohan, 32, Rahul Dravid, 35]
该代码易于编写,但是是否更冗长一些,尤其是在迭代部分? 我们为什么要迭代? 如果有一个API可以迭代内容并给我们最终结果,即我们给出源List并使用一系列方法调用来获得我们正在寻找的结果List,那不是很酷吗? 是的,这在其他语言(例如Scala,Groovy)中是可行的,它们支持传递闭包,也支持内部迭代。 但是Java开发人员有解决方案吗? 是的,通过引入对Lambda Expressions(closures)的支持和增强的Collection API来利用lambda Expression支持,可以解决这个确切的问题。 不幸的消息是它将成为Java 8的一部分,并且将需要一些时间才能进入主流开发。
利用Java 8对上述情况的增强
正如我在增强Collections API以支持Lambda Expression之前所说的那样,可以在这里阅读有关它的更多信息。 JDK团队没有将所有新的API添加到Collection类中,而是创建了一个称为“ Stream”的新概念,并在该类中添加了大多数API。 “流”是从创建它的集合中获得的一系列元素。 要了解有关Stream类起源的更多信息,请参考此文档 。 为了实现从使用Java 8中的增强功能开始的示例,我们将使用一些新的API,即:stream(),filter(),collect(),Collectors.toCollection()。
stream() :使用在其上调用此API的集合来创建Stream类的实例。
filter() :此方法接受一个lambda表达式,该表达式接受一个参数并返回一个布尔值。 该lambda表达式被编写为实现Predicate类的替代。 collect() :此方法有2个重载版本。 我在这里使用的是一个Collector的实例。 此方法获取流的内容并构造另一个集合。 此构造逻辑由收集器定义。 Collectors.toCollection() : 收藏家是一个工厂收集 。 并且toCollection()采用Lambda表达式/方法引用,该引用应返回Collection类的任何派生类的新实例。
简要介绍所使用的API之后,让我展示与第一个代码示例等效的代码:
List<Person> olderThan30 = //Create a Stream from the personListpersonList.stream().//filter the element to select only those with age >= 30filter(p -> p.age >= 30).//put those filtered elements into a new List.collect(Collectors.toCollection(() -> new ArrayList<Person>()));
System.out.println(olderThan30);
上面的代码同时使用了内部迭代和lambda表达式,使其直观,简洁且令人耳目一新。 如果您不熟悉Lambda表达式的概念,请查看我以前的文章 ,其中简要介绍了Lambda表达式。
参考:从Javas 合作伙伴 Mohamed Sanaulla的Experiences Unlimited博客中提取Java集合的元素-Java 8方法 。
翻译自: https://www.javacodegeeks.com/2013/03/extracting-the-elements-of-the-java-collection-the-java-8-way.html
java集合提取最小的日期