lambda表达式的distinct去重
天真的我最开始以为可以写成list.distinct(x=>x.name);以为这样就可以按照name去重了,结果是不行的。这里记录下正确的用法。
1.这里是针对int集合 可以满足
#region 对数字集合的去重
//List<int> list = new List<int> { 1,1,2,3,4,5,5,6,6,7,7,7 };
//foreach (var item in list)
//{
// Console.Write(item+" ");
//}
//var res = list.Distinct();
//Console.WriteLine();
//Console.WriteLine("********************************");
//foreach (var item in res)
//{
// Console.Write(item+" ");
//}
//可以看到 对于数字来说 distinct可以实现去重
#endregion
2.对对象集合使用 失败
#region 对非数字类型去重失败的方法
//List<Student> list = new List<Student>
//{
// new Student{name="张三",age=20},
// new Student{name="张三",age=20},
// new Student{name="李四",age=20},
// new Student{name="李四",age=20},
// new Student{name="王五",age=20},
// new Student{name="赵六",age=20},
// new Student{name="陈启",age=20},
// new Student{name="陈启",age=20},
//};
//foreach (var item in list)
//{
// Console.Write(item.name + " ");
//}
//var res = list.Distinct();
//Console.WriteLine();
//Console.WriteLine("********************************");
//foreach (var item in res)
//{
// Console.Write(item.name + " ");
//}
//运行这段代码 可以看到去重失败了 下面来看正确的做法
#endregion
3.这才是正确的方法
class Program
{
static void Main(string[] args)
{
#region 对非数字类型去重正确
List<Student> list2 = new List<Student>
{
new Student{name="张三",age=20},
new Student{name="张三",age=20},
new Student{name="李四",age=20},
new Student{name="李四",age=20},
new Student{name="王五",age=20},
new Student{name="赵六",age=20},
new Student{name="陈启",age=20},
new Student{name="陈启",age=20},
};
foreach (var item in list2)
{
Console.Write(item.name + " ");
}
var res2 = list2.Distinct(new userCompare());
Console.WriteLine();
Console.WriteLine("********************************");
foreach (var item in res2)
{
Console.Write(item.name + " ");
}
//声明一个类 实现IEqualityComparer接口
//实现方法bool Equals(T x, T y);
//int GetHashCode(T obj);
//然后再内部写上比较的字段和属性 比较才能成功 才能去重
#endregion
Console.ReadLine();
}
}
public class Student
{
public int age { get; set; }
public string name { get; set; }
}
public class userCompare : IEqualityComparer<Student>
{
#region IEqualityComparer<user> Members
public bool Equals(Student x, Student y)
{
return x.name.Equals(y.name);
}
public int GetHashCode(Student obj)
{
return obj.name.GetHashCode();
}
#endregion
}
lambda表达式的distinct去重的更多相关文章
- 【java8】使用lambda表达式对List去重
先收集再排序. public static void main(String[] args) { BookBo bookBo1 = new BookBo("1", "语文 ...
- Lambda如何实现条件去重distinct List,如何实现条件分组groupBy List
条件去重 我们知道, Java8 lambda自带的去重为 distinct 方法, 但是只能过滤整体对象, 不能实现对象里的某个值进行判定去重, 比如: List<Integer> nu ...
- Linq表达式、Lambda表达式你更喜欢哪个?
什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
- Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例
本文由 ImportNew 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的ja ...
- Linq之Lambda表达式
一 什么是LINQ? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...
- Java8特性详解 lambda表达式 Stream
1.lambda表达式 Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正 ...
- Java 8 Lambda表达式10个示例【存】
PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...
- 【Java学习笔记之三十一】详解Java8 lambda表达式
Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...
- JAVA8之lambda表达式具体解释,及stream中的lambda使用
前言: 本人也是学习lambda不久,可能有些地方描写叙述有误,还请大家谅解及指正! lambda表达式具体解释 一.问题 1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.l ...
随机推荐
- 扩展、接管MVC都不会,还会用Spring Boot?
持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管MVC?[不推荐] 为 ...
- devops-jenkins分布式构建
1. devops-jenkins分布式构建 1) 点击系统管理 进入节点管理 2) 点击新建节点 3) 进行节点配置在node节点服务器配置,进行java的安装 [root@nginx-backup ...
- protoc-c 安装记录
记录下 protobuf-c 安装过程中的问题. 1) 安装的时候没细看依赖. -- protobuf-c requires a C compiler, a C++ compiler, protob ...
- AMBuild
什么是AMBuild? AMBuild是构建软件项目和创建发布包的工具.它是针对C++项目的,当然也可以用于其它任何语言的项目,它主要针对解决大多数构建工具所解决不了的三个大问题: 1.准确性:不需要 ...
- 秒懂JVM的垃圾回收机制
前言 阅读过王子之前JVM文章的小伙伴们,应该已经对JVM的内存分布情况有了一个清晰的认识了,今天我们就接着来聊聊JVM的垃圾回收机制,让小伙伴们轻松理解JVM是怎么进行垃圾回收的. 复制算法.Ede ...
- MeteoInfoLab脚本示例:数据投影-FLEXPART
FLEXPART是一个类似HYSPLIT的扩散模式,它输出的netcdf文件参照了WRF,可惜全局属性没有写全,比如只有一个投影名称(例如Lambert),没有相关的投影参数:中央经度,标准纬度等等. ...
- 以太坊PoW
ethash ethash(eth+hash)是以太坊设计的挖矿算法,为了实现ASIC-resistance,ethash依赖于对内存资源的访问,是一种memory-hard函数.同时为了支持轻节点对 ...
- go 实现websocket推送
index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- Linux的安全模型
3A 资源分派: Authentication:认证,验证用户身份 Authorization:授权,不同的用户设置不同权限 Accouting|Audition:审计 当用户登录成功时,系统会自动分 ...
- linux-mint18 (ubuntu 16) 安装python3
直接执行命令: sudo apt-get install python3 将python3设置为默python版本: sudo update-alternatives --install /usr/b ...