写出java8实现对List<User>中的username字段过滤出不等于张三的数据。。。 对。。。这个是一道面试题。当时没有看过java8的新特性。。。所以有点懵。
看完之后感觉 真。。好用~好简单那~
package xcTest3; import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors; /**
* 定义了一个用户内部类
* @author 搬码的小菜鸟
*/
class User{
private int id; // ID
private String username; // 姓名
private int age; // 年龄 public User(){} public User(int id,String username,int age) {
this.id=id;
this.username=username;
this.age=age;
} public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", age=" + age + "]";
}
} /**
* 一个测试类
* @author 搬码的小菜鸟
*/
public class Test {
public static void main(String[] args) {
// 需要过滤出排除姓名为张三的数据
List<User> users=new ArrayList<>();
users.add(new User(4,"张三",11));
users.add(new User(1,"李四",18));
users.add(new User(3,"小明",18));
users.add(new User(2,"小红",16)); System.out.println("所有数据:"+users); // 主要过滤运用了8中Lambda表达式和filter这个方法
System.out.println("过滤后的数据:"+users.stream().filter(u->u.getUsername()!="张三").collect(Collectors.toList()));
}
}
执行输出结果为:
所有数据:[User [id=4, username=张三, age=11], User [id=1, username=李四, age=18], User [id=3, username=小明, age=18], User [id=2, username=小红, age=16]] 过滤后的数据:[User [id=1, username=李四, age=18], User [id=3, username=小明, age=18], User [id=2, username=小红, age=16]]
还有一些常用的方法分享给大家
// 输出所有人的姓名(某个字段)
System.out.print("输出所有人的姓名:");
users.stream().collect(Collectors.toList()).forEach(i->System.out.print(i.getUsername()+" ")); // 根据年龄来分组
System.out.println("\n根据年龄来分组:"+users.stream().collect(Collectors.groupingBy(User::getAge))); /**
* List转Map
* 最后的(k1,k2)->k1表示如果有重复key则只保留key1
* 也可以不写最后的参数,如果有重复key就会报Duplicate key。。。错
*/
Map<Integer, User> userMap=users.stream().collect(Collectors.toMap(User::getId, u->u, (k1,k2)->k1));
System.out.println("List转Map:"+userMap); /**
* 算出全部总年龄(虽然没啥用哈,但是没有别的数据能总和啦)
* reduce(0,(temp,age)->temp+age))
* --0代表起始数据为0,也可以自己根据逻辑定义
* --(temp,age)->temp+age 我自己的理解:temp是累加数 age下一个要加数(所以我才起这样的名字,如果不对,请指出。。。)
* 其实还会有一个参数,但是第三个参数只有并行流中才会执行,所以我就没写啦。。。
*/
System.out.println("总年龄:"+users.stream().map(User::getAge).reduce(0,(temp,age)->temp+age)); // 查找岁数最大的人
System.out.println("岁数最大:"+users.stream().collect(Collectors.maxBy(Comparator.comparing(User::getAge)))); // 查找岁数最小的人
System.out.println("岁数最小:"+users.stream().collect(Collectors.minBy(Comparator.comparing(User::getAge)))); //去掉同岁的盆友 只留一个就够了
System.out.println("去重后:"+users.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() –>
new TreeSet<>(Comparator.comparing(User::getAge))), ArrayList::new)));
执行输出结果为:
输出所有人的姓名:张三 李四 小明 小红
根据年龄来分组:{16=[User [id=2, username=小红, age=16]], 18=[User [id=1, username=李四, age=18], User [id=3, username=小明, age=18]], 19=[User [id=4, username=张三, age=19]]}
List转Map:{1=User [id=1, username=李四, age=18], 2=User [id=2, username=小红, age=16], 3=User [id=3, username=小明, age=18], 4=User [id=4, username=张三, age=19]}
总年龄:71
岁数最大:Optional[User [id=4, username=张三, age=19]]
岁数最小:Optional[User [id=2, username=小红, age=16]]
去重后:[User [id=2, username=小红, age=16], User [id=1, username=李四, age=18], User [id=4, username=张三, age=19]]
到这里就差不多结束啦,感觉确实比之前简单很多哈,几行代码比咱们自己写for循环简单好使多啦。。。
主要是新的东西,以上我理解的可能不对,欢迎指正或补充~求大神提点~~~
写出java8实现对List<User>中的username字段过滤出不等于张三的数据的更多相关文章
-
linux中5种方法过滤出文件夹ls -F ls -p grep、find快速查找过滤目录
1.ls -l , 根据颜色区分目录和文件2.ls -l, 以d开头的是目录 ls -l | grep "^d" 过滤以d开头的3.ls -l , 输入结果中第二列中大余1的是目录 ...
-
浅入深出之Java集合框架(中)
Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...
-
Python中实现对list做减法操作介绍
Python中实现对list做减法操作介绍 这篇文章主要介绍了Python中实现对list做减法操作介绍,需要的朋友可以参考下 问题描述:假设我有这样两个list, 一个是list1,list1 = ...
-
在应用程序中实现对NandFlash的操作
以TC58NVG2S3ETA00 为例: 下面是它的一些物理参数: 图一 图二 图三 图四 图五 图6-0 图6-1 说明一下,在图6-1中中间的那个布局表可以看做是实际的NandFlash一页数据的 ...
-
51单片机实现对24C02进行页写、顺序读取并显示验证
//************************************************************************************* //**程序名称:51单 ...
-
通过memcached来实现对tomcat集群中Session的共享策略
近期在做一套集群的实现,实现的方案是在Linux下完成对Apache + Tomcat 负载均衡的功能. 上述功能已经实现,有需要了解的朋友可以看我另外一篇博文. Linux下Apache与Tomca ...
-
Android平台中实现对XML的三种解析方式
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
-
ios中实现对UItextField,UITextView等输入框的字数限制
本文转载至 http://blog.sina.com.cn/s/blog_9bf272cf01013lsd.html 2011-10-05 16:48 533人阅读 评论(0) 收藏 举报 1. ...
-
Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
随机推荐
-
JAXB命名空间及命名空间前缀处理
本篇介绍下JAXB进阶使用,命名空间处理 使用package-info.java添加默认命名空间在需要添加命名空间的包下面添加package-info.java文件,然后添加@XmlSchema注解, ...
-
8 Regular Expressions You Should Know
Regular expressions are a language of their own. When you learn a new programming language, they're ...
-
Delphi访问活动目录
活动目录Active Directory是用于Windows Server的目录服务,它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用.Active Directory使用结构化 ...
-
js实现文字超出部分用省略号代替实例代码
关于超出一定字数用省略号显示的问题,这种要求在我们日常开发的时候经常见到,我们之前基本都是用CSS来完成的,今天给大家分享个Javascript实现这个功能的示例代码,有需要的可以参考借鉴. 话不多说 ...
-
vue 手指长按触发事件
按钮 <span class="btn" @touchstart="gtouchstart()" @touchmove="gtouchmove( ...
-
ubuntu 中文设置
1,安装中文语言包 sudo apt-get install language-pack-zh-hans sudo update-locale LANG=zh_CN.UTF-8 添加中文支持: sud ...
-
openstack查看命令的restful调用形式
[root@cc10 fast-pulsar2]# [root@cc10 fast-pulsar2]# cinder --debug type-create hzb DEBUG:keystonecli ...
-
http2.0 特性
1.HTTP 2.0将只用于https://网址,而 http://网址将继续使用HTTP/1. 查看http协议(chrome F12) 2.异步连接多路复用 HTTP2.0 把消息分解为独立帧,交 ...
-
Right-BICEP测试四则运算2
根据Right-BICEP单元测试的方法,我对我写的四则运算2的程序进行了测试: 1.测试能否控制使用乘除 有乘除 无乘除 2.测试是否能加括号 不加括号 加括号 3.能否控制结果没有负数 无负数 4 ...
-
Java 中可变参数
可变参数 Java 中可变参数 现在需要编写一个求和的功能,但是不知道有几个参数,在调用的时候才知道有几个参数,请问这如何实现呢? Java 给我们提供了一个 JDK 1.5 的新特性---可变参数 ...