java8 filter return_java8新特性Java 8 Streams filter示例 - Java教程

在这篇教程中我将向你展示 filter(), collect(), findAny() 和 orElse() 的用法

1. Streams filter() 和 collect()

1.1 在 Java 8 以前, 像下面这样过滤一个 List:

BeforeJava8.java

package com.mkyong.java8;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class BeforeJava8 {

public static void main(String[] args) {

List lines = Arrays.asList("spring", "node", "mkyong");

List result = getFilterOutput(lines, "mkyong");

for (String temp : result) {

System.out.println(temp); //output : spring, node

}

}

private static List getFilterOutput(List lines, String filter) {

List result = new ArrayList<>();

for (String line : lines) {

if (!"mkyong".equals(line)) { // we dont like mkyong

result.add(line);

}

}

return result;

}

}

Output

spring

node

1.2 Java 8里面的等价写法: 使用collect()将一个List转化为steam(流),然后使用stream.filter() 来过滤它.

NowJava8.java

package com.mkyong.java8;

import java.util.Arrays;

import java.util.List;

import java.util.stream.Collectors;

public class NowJava8 {

public static void main(String[] args) {

List lines = Arrays.asList("spring", "node", "mkyong");

List result = lines.stream() // 转化为一个流

.filter(line -> !"mkyong".equals(line)) // 排除 'mkyong'

.collect(Collectors.toList()); // 吧输出流收集回List中

result.forEach(System.out::println); //输出 : spring, node

}

}

Output

spring

node

2. Streams filter(), findAny() 和 orElse()

Person.java

package com.mkyong.java8;

public class Person {

private String name;

private int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

//gettersm setters, toString

}

2.1 在Java 8以前, 你想通过name获取一个Person通常像这样 :

BeforeJava8.java

package com.mkyong.java8;

import java.util.Arrays;

import java.util.List;

public class BeforeJava8 {

public static void main(String[] args) {

List persons = Arrays.asList(

new Person("mkyong", 30),

new Person("jack", 20),

new Person("lawrence", 40)

);

Person result = getStudentByName(persons, "jack");

System.out.println(result);

}

private static Person getStudentByName(List persons, String name) {

Person result = null;

for (Person temp : persons) {

if (name.equals(temp.getName())) {

result = temp;

}

}

return result;

}

}

Output

Person{name='jack', age=20}

2.2 在Java 8里面的等价操作是使用 stream.filter()来过滤 List,使用 .findAny().orElse (null) 来返回指定的对象.

NowJava8.java

package com.mkyong.java8;

import java.util.Arrays;

import java.util.List;

public class NowJava8 {

public static void main(String[] args) {

List persons = Arrays.asList(

new Person("mkyong", 30),

new Person("jack", 20),

new Person("lawrence", 40)

);

Person result1 = persons.stream() // 转化为流

.filter(x -> "jack".equals(x.getName())) // 只过滤出"jack"

.findAny() // 如果找到了就返回

.orElse(null); // 如果找不到就返回null

System.out.println(result1);

Person result2 = persons.stream()

.filter(x -> "ahmook".equals(x.getName()))

.findAny()

.orElse(null);

System.out.println(result2);

}

}

Output

Person{name='jack', age=20}

null

2.3 多重条件指定.

NowJava8.java

package com.mkyong.java8;

import java.util.Arrays;

import java.util.List;

public class NowJava8 {

public static void main(String[] args) {

List persons = Arrays.asList(

new Person("mkyong", 30),

new Person("jack", 20),

new Person("lawrence", 40)

);

Person result1 = persons.stream()

.filter((p) -> "jack".equals(p.getName()) && 20 == p.getAge())

.findAny()

.orElse(null);

System.out.println("result 1 :" + result1);

//or like this

Person result2 = persons.stream()

.filter(p -> {

if ("jack".equals(p.getName()) && 20 == p.getAge()) {

return true;

}

return false;

}).findAny()

.orElse(null);

System.out.println("result 2 :" + result2);

}

}

Output

result 1 :Person{name='jack', age=20}

result 2 :Person{name='jack', age=20}

3. Streams filter() 和 map()

NowJava8.java

package com.mkyong.java8;

import java.util.Arrays;

import java.util.List;

import java.util.stream.Collectors;

public class NowJava8 {

public static void main(String[] args) {

List persons = Arrays.asList(

new Person("mkyong", 30),

new Person("jack", 20),

new Person("lawrence", 40)

);

String name = persons.stream()

.filter(x -> "jack".equals(x.getName()))

.map(Person::getName) //吧流转化为String

.findAny()

.orElse("");

System.out.println("name : " + name);

List collect = persons.stream()

.map(Person::getName)

.collect(Collectors.toList());

collect.forEach(System.out::println);

}

}

Output

name : jack

mkyong

jack

lawrence

注意

Highly recommend this Streams tutorial – Processing Data with Java SE 8 Streams

References

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 线性表的表示和实现_线性表中顺序表的的理解和实现(java)

线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素&#xff0c;这种表示也称作线性表的顺序存储结构或顺序映像。通常&#xff0c;称这种存储结构的线性表为顺序表。特点是&#xff1a;逻辑上相邻的数据元素&#xff0c;其物理次序上也是相邻的。顺序表…

akka连接是什么_什么是Akka?

akka连接是什么在深入探讨什么是Akka之前&#xff0c;让我们退后一步来了解并发编程的概念在应用程序开发世界中是如何演变的。 应用程序已从大型的整体程序演变为面向对象的模型。 随着Java EE和Spring框架的出现&#xff0c;应用程序设计演变为更多的基于流程或任务的设计模型…

java socket 判断断网_java socket 判断对方在线或离线、断线

1 在客户端和服务器端做心跳检测(这个后来我放弃了)2 客户端中断连接&#xff0c;服务器会抛出异常&#xff0c;利用这点3这是我为什么不用心跳包的原因&#xff0c;因为不需要了。 有的时候&#xff0c;我们可能网络突然中断了。但是服务器依然会监听那个连接。而且很长都不抛…

java 可重入读写锁 ReentrantReadWriteLock 详解

详见&#xff1a;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt206 读写锁 ReadWriteLock读写锁维护了一对相关的锁&#xff0c;一个用于只读操作&#xff0c;一个用于写入操作。只要没有writer&#xff0c;读取锁可以由多个reader线程同时保持。写入锁是独占的…

将JPA Hibernate与OptaPlanner集成

我们一直在改进OptaPlanner与JEE其余部分的集成&#xff0c;因此&#xff0c;构建可以正常工作的最终用户应用程序更加容易。 让我们看一下改进的JPA Hibernate集成。 基础 JPA Hibernate和OptaPlanner都可以在POJO&#xff08;普通的旧Java对象&#xff09;上工作&#xff0c…

c java 系统开发_java开发系统内核:使用C语言开发系统应用程序

更详细的讲解和代码调试演示过程&#xff0c;请参看视频用java开发C语言编译器如果你对机器学习感兴趣&#xff0c;请参看一下链接&#xff1a;机器学习&#xff1a;神经网络导论我们的操作系统通过增添内核接口导出机制后&#xff0c;已经可以作为平台&#xff0c;运行应用程序…

php 跨二级域名 设置cookie

登入也设置cookie setcookie(user_id, authlogin("user_id", "ENCODE"), time()(3600*24*30), "/", ".lfb365.com"); authlogin()方法为将user_id进行编码&#xff0c;非内置方法 退出页清除cookie setcookie("user_id", &q…

java jbutton文字_java JButton 改变按钮文字

展开全部因为 i 和 j 是局部变量&#xff0c;62616964757a686964616fe78988e69d8331333337383933在内部类中不允许访问局部变量&#xff0c;如果要访问必须添加 final。所以有个折中的办法&#xff0c;再声明两个中间变量&#xff0c;并定义为 final 类型的&#xff0c;你在内部…

抑制java对修饰符的检查_Java 7对抑制异常的支持

抑制java对修饰符的检查在JDK 7中 &#xff0c;向Throwable类&#xff08; Exception和Error类的父类&#xff09;添加了一个新的构造函数和两个新方法。 添加了新的构造函数和两个新方法以支持“抑制的异常”&#xff08;不要与吞咽或忽略异常的不良做法相混淆&#xff09;。 …

win7下装ubuntu14.04双系统

一、给ubuntu准备安装空间计算机--右键--管理-磁盘管理--选择一个空余空间较多的磁盘--右键--压缩卷--压缩大概60G空间&#xff08;接下来ubuntu就会装到这60G里面&#xff09;二、制作启动u盘用ultraiso将ubuntu14.04镜像写入u盘&#xff0c;制作启动u盘三、u盘启动&#xff0…

java bundle_java.util.ResourceBundle国际化用法详解

初识国际化和ResourceBundle这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念&#xff0c;两者都是一起出现的。可以说&#xff0c;国际化的目的就是为了实现本地化&#xff0c;详细的介绍可以看本文的最后。比如对于“取消”&#xff0c;中文中我们使用“…

编写基于事件的CQRS读取模型

关于事件源和CQRS的讨论似乎通常集中在CQRS上下文中的整体系统架构或领域驱动设计的各种形式。 但是&#xff0c;尽管也有一些有趣的考虑&#xff0c;但读取模型经常被忽略。 在本文中&#xff0c;我们将展示一个通过使用事件流填充视图模型的示例实现。 总览 读取模型的想法…

JSP数据交互

JSP数据交互 一、jsp中java小脚本 1.<% java代码段%> 2.<% java表达式%>不能有分号 3.<%!成员变量和函数声明%>二、注释 1.<!--html注释-->客户端可以看到 2.<%--jsp注释--%>客户端不能看到三、jsp页面的的执行过程 1.客户端请求&#xff08;输入…

java else if和switch_如何优雅地优化代码中的的if else和switch

引言一般来说&#xff0c;随着我们项目的迭代以及业务的越来越复杂&#xff0c;项目中的分支判断会原来越多。当项目中涉及到复杂的业务判断或者分支逻辑时&#xff0c;我们就需要考虑是否需要对项目进行重构了&#xff0c;或者if else和switch case是否能够满足当前项目的复杂…

jQuery data

一个简单的Cache (function(){var __cache {},Cache {get: function(__name){return __cache[__name] || undefined;}, set: function(__name, __value){return (__cache[__name] __value)}};this.Cache Cache; })();alert(Cache.get("name")); //undefine…

flink 复杂事件_复杂的(事件)世界

flink 复杂事件这篇博客文章试图总结CEP领域中的技术&#xff0c;并介绍它们的主要功能和不足。 有时似乎过度使用了CEP一词&#xff08;就像ESB一样&#xff09;&#xff0c;下面的内容反映了我们对它的理解和理解。 ESPER&#xff08; http://esper.codehaus.org/ &#xff0…

设计模式(中介者模式-对象去耦)

声明&#xff1a;本系列文章内容摘自《iOS设计模式》 中介者模式 用一个对象来封装一系列对象的交互方式。中介者使个对象不需要显式地相互调用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 何时使用中介者模式 1.对象间的交互虽定义明确然而非…

java flash截图_求大神们帮助, 如何在java中实现文字数据转换成图片或flash显示

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{response.setContentType("image/jpeg");createImage(response.getOutputStream());} private …

Spring Cloud Sidecar –节点初始化

在上一篇博客文章中&#xff0c;我描述了Sidecar应用程序如何用于在Eureka中注册Cassandra节点&#xff0c;并且更普遍地可以用于在Eureka中注册任何非JVM应用程序。 在本文中&#xff0c;我将介绍应用程序如何查询Sidecar注册节点。 发现注册的节点–初始化后 如果在Bean初始…

windows服务器的DDOS防御,

抵御 SYN 攻击 SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞。要实施 SYN 洪水攻击&#xff0c;攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列。这会禁止其他用户建立网络连接。 要保护网络抵御 SYN 攻击&#xff0c;请按照下面这些通用步骤操作&…