写出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字段过滤出不等于张三的数据的更多相关文章

  1. linux中5种方法过滤出文件夹ls -F ls -p grep、find快速查找过滤目录

    1.ls -l , 根据颜色区分目录和文件2.ls -l, 以d开头的是目录 ls -l | grep "^d" 过滤以d开头的3.ls -l , 输入结果中第二列中大余1的是目录 ...

  2. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  3. Python中实现对list做减法操作介绍

    Python中实现对list做减法操作介绍 这篇文章主要介绍了Python中实现对list做减法操作介绍,需要的朋友可以参考下 问题描述:假设我有这样两个list, 一个是list1,list1 = ...

  4. 在应用程序中实现对NandFlash的操作

    以TC58NVG2S3ETA00 为例: 下面是它的一些物理参数: 图一 图二 图三 图四 图五 图6-0 图6-1 说明一下,在图6-1中中间的那个布局表可以看做是实际的NandFlash一页数据的 ...

  5. 51单片机实现对24C02进行页写、顺序读取并显示验证

    //************************************************************************************* //**程序名称:51单 ...

  6. 通过memcached来实现对tomcat集群中Session的共享策略

    近期在做一套集群的实现,实现的方案是在Linux下完成对Apache + Tomcat 负载均衡的功能. 上述功能已经实现,有需要了解的朋友可以看我另外一篇博文. Linux下Apache与Tomca ...

  7. Android平台中实现对XML的三种解析方式

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  8. ios中实现对UItextField,UITextView等输入框的字数限制

    本文转载至 http://blog.sina.com.cn/s/blog_9bf272cf01013lsd.html 2011-10-05 16:48 533人阅读 评论(0) 收藏 举报 1.    ...

  9. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

随机推荐

  1. Nginx unit 源码安装初体验

    Nginx unit 源码安装初体验 上次介绍了从yum的安装方法(https://www.cnblogs.com/wang-li/p/9684040.html),这次将介绍源码安装,目前最新版为1. ...

  2. jquery的ajax及注意事项

    1.引jquery包(jquery-1.8.0.min.js) <script type="text/javascript"> $(function () { //根据 ...

  3. 卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

    卷积可能是现在深入学习中最重要的概念.卷积网络和卷积网络将深度学习推向了几乎所有机器学习任务的最前沿.但是,卷积如此强大呢?它是如何工作的?在这篇博客文章中,我将解释卷积并将其与其他概念联系起来,以帮 ...

  4. 函数round和trunc

    1.round函数. round函数能够按照数学规则进行四舍五入的进位,以保留小数点后要求的位数. 使用方法为 round(<小数>,<保留的位数>) 下面是两个例子: ) f ...

  5. Delphi控件cxGrid 如何动态创建列?

    方法一: var i: Integer; Column: TcxGridDBColumn; cxView: TcxGridDBTableView; begin cxView := Self.Level ...

  6. 背水一战 Windows 10 (80) - 本地化

    [源码下载] 背水一战 Windows 10 (80) - 本地化 作者:webabcd 介绍背水一战 Windows 10 之 本地化 Demo 改变语言 示例1.演示本地化的基本应用Localiz ...

  7. iOS-Xcode解决【workspace integrity couldn't load project'】

    出现如标题提示的项目打不开情况,多半可能是因为Xcode版本不同,或者是SVN/Git使用导致 解决办法一: 删除冲突代码,"项目文件->Pod文件夹->Pods.xcodepr ...

  8. Hive的union和join操作

    建表语句: create table  tb_in_base (    id  bigint,    devid bigint,     devname string  ) partitioned b ...

  9. 关于appendChild和insertBefore appendTo()和append

    appendChild和insertBefore(原生js) appendTo()和append(jquery)

  10. 关于loading

    在开发中,不可避免的会需要loading的出现,来提高用户体验, 自己在查找中,总结了两条: 1.window.onload的时候显示loading,首先loading图片是一直存在的,window. ...