Lambda表达式去重操作

  在项目里用lambda的Distinct方法进行对象去重操作发现返回的数据仍然还是没有去重的数据,百度搜索后发现Distinct只是将List容器中的各个对象地址进行比较来进行去重。

    public class Employee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public char Sex { get; set; }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            var temp1 = new Employee()
            {
                ID = 1,
                Age = 24,
                Name = "frank",
                Sex = ‘m‘
            };

            data.Add(temp1);
            data.Add(temp1);
            var datanew = data.Distinct();

            Console.WriteLine(datanew.Count());

            Console.ReadKey();
        }
    }

   这并不能达到我们将不同对象在序列化后进行对象去重的要求。

   去重主要思路:在lambda表达式GrouBy分组后只取每组第一条的数据来达到筛选唯一数据的结果,实现代码如下

    public class Employee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public char Sex { get; set; }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            List<Employee> data = new List<Employee>()
            {
                new Employee()
                {
                    ID = 1,
                    Age = 22,
                    Name = "阿飞",
                    Sex = ‘m‘
                },
                 new Employee()
                 {
                     ID = 1,
                     Age = 22,
                     Name = "阿飞",
                     Sex = ‘m‘
                 },
                new Employee()
                {
                    ID = 2,
                    Age = 23,
                    Name = "阿飞",
                    Sex = ‘m‘
                },
            };

            var datanew = data.GroupBy(e => e.ID).Select(e => e.First());

            Console.WriteLine(datanew.Count());
            Console.ReadKey();
        }
    }
时间: 2024-08-02 11:40:12

Lambda表达式去重操作的相关文章

Util应用程序框架公共操作类(十二):Lambda表达式公共操作类(三)

今天在开发一个简单查询时,发现我的Lambda操作类的GetValue方法无法正确获取枚举类型值,以至查询结果错误. 我增加了几个单元测试来捕获错误,代码如下. /// <summary> /// 测试值为枚举 /// </summary> [TestMethod] public void TestGetValue_Enum() { var test1 = new Test1(); test1.NullableEnumValue = LogType.Error; //属性为枚举,值

java/c++中有关lambda表达式的书写及stream流的操作的基本总节

package com.acm; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Prior

C++11中的Lambda表达式

本文地址:http://www.cnblogs.com/archimedes/p/c11-lambda.html,转载请注明源地址. “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数.Lambda表达式可以表示闭包(注意和数学传统意义上的不同). ISO C++ 11 标准的一大亮点是引入Lambda表达式.基本语法如

C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲

 使用C++风格的数组,不需要管理内存. array要注意不要溢出,因为它是栈上开辟内存. array适用于任何类型 #include<iostream> #include<array> #include<vector>   //C++的标准库 #include<string>   //C++字符串 #include <stdlib.h> using  std::array; //静态数组,栈上 using std::vector; //动态

Java8 Lambda表达式应用案例 -- 单线程游戏服务器+异步数据库操作

前段时间我们游戏服务器的开发环境升级到了Java8,这两天我又把服务器的线程模型重新设计了一下,用上了Lambda表达式.Lambda表达式确实能够大幅简化Java代码,特别是丑陋不堪的匿名内部类,这篇文章主要就是想和大家分享这一点. 线程模型 首先简单介绍一下我们游戏服务器的线程模型,大致如下图所示: Netty线程池只处理消息的收发,当Netty收到消息之后,会交给游戏逻辑线程处理.由于是单线程在处理游戏逻辑,所以每一个消息必须很快处理完,也就是说,不能有数据库等耗时操作,不然逻辑线程很可能

Java8 Lambda表达式和流操作如何让你的代码变慢5倍

原文出处:ImportNew 有许许多多关于 Java 8 中流效率的讨论,但根据 Alex Zhitnitsky 的测试结果显示:坚持使用传统的 Java 编程风格——iterator 和 for-each 循环——比 Java 8 的实现性能更佳. Java 8 中的 Lambda 表达式和流(Stream)受到了热烈欢迎.这是 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.我们

lambda表达式与委托与线程初步谈论-基于刘铁锰视频观后操作

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//线程 using System.Threading;//引用线程方法 namespace ConsoleApplication2 { class Program { static void Main(string[] args) { //委托详解 //Func返回带

使用lambda表达式操作HashMap

Java8之前,如果想根据map的value值来排序话,比较繁琐参看<如何将HashMap,按照value值排序 > 现在借助于lambda表达式,就方便多了. <span style="font-size:14px;">Map<String,Integer> map=new HashMap<>(); map.put("derek",24 ); map.put("dad", 51); map.put

【Java学习笔记之三十一】详解Java8 lambda表达式

Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出.Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码.这样有时可读性更好,表达更清晰.在Java生态系统中,函数式表达与对面向对象的全面支持是个激动人心的进步.将进一步促进并行