写出java8实现对List<User>中的username字段过滤出不等于张三的数据
写出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包 这 ...
随机推荐
- Django积木块一——验证码
验证码 在github中搜验证码,那个有使用文档 # pip install django-simple-captcha==0.4.6 # setting app captcha # url url( ...
- iOS逆向之TheOS
TheOS 被设计为一个在基于 Unix 平台 (Mac OS X.IOS…) 和大多数 的Linux 平台下开发 iOS 程序的集成开发环境.说是集成开发环境,其实就是给我们准备好了一些代码模板.预 ...
- 在ng-repeat内Checkbox默认选中
Angularjs的ng-repeat是用来循环产生呈现数据. 当我们需要在ng-repeat循环中呈现一系列Checkbox时,某些checkbox选项是默认选中的. 在ASP.NET MVC程序中 ...
- 利用PHP扩展Taint找出网站的潜在安全漏洞实践
一.背景 笔者从接触计算机后就对网络安全一直比较感兴趣,在做PHP开发后对web安全一直比较关注,2016时无意中发现Taint这个扩展,体验之后发现确实好用:不过当时在查询相关资料时候发现关注此扩展 ...
- 【Fiddler学习】Fiddler教程,比较经典全面(转)
简介 Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddler可以也可以让你检查所有的HTTP通讯,设置断点,以及Fiddle所有 ...
- vscode 编辑器常用快捷键
最近,打算换个编辑器,而 vscode 是一个不错的选择.大部分快捷键和 sublime 还是很像的,但有些也不一样.特此整理一份小笔记. 参考: vscode: Visual Studio Code ...
- sublime text下安装插件autoprefixer
有时候在写css样式的时候,分不清哪些属性需要前缀,哪些不需要,总是爱搞混淆了,于是autoprefixer这款插件便应运而生了.虽然在使用webpack的时候,我们可以很方便的使用这个,但是,如果项 ...
- Swing中的线程并发处理
理论解释见官方的文档: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html 一个Swing程序中一般有下面三种 ...
- python lxml库生成xml文件-节点命名空间问题
lxml库,处理xml很强大,官方文档:https://lxml.de/tutorial.html#namespaces 例如: 我们要生成如下格式的报文: <ttt:jesson xmlns: ...
- Maven项目报错:Missing artifact****和ArtifactDescriptorException: Failed to read artifact descriptor for***和Cannot change version of project facet Dynamic web module to 2.5
一.关于Cannot change version of project facet Dynamic web module to 2.5 具体查看博客:http://blog.csdn.net/ste ...