精华内容
下载资源
问答
  • 首先,常规的实体类的多条件排序可参考: Java8:Lambda表达式增强版Comparator和排序 java8-Lambda中比较器Comparator的使用 我们有个Matrix 多条件排序要求,矩阵的列动态生成,程序可以知道该列是定性的还是...

    首先,常规的实体类的多条件排序可参考:

    Java8:Lambda表达式增强版Comparator和排序

    java8-Lambda中比较器Comparator的使用

    我们有个Matrix 多条件排序要求,矩阵的列动态生成,程序可以知道该列是定性的还是定量的值。用户在浏览这个Matrix 的时候,他会选择若干个列,每个列的升降序和排序优先级进行排序,后台负责做真分页排序。

    比如一个matrix 的数据格式如下,java 使用的数据结构为:List<LinkedHashMap<String, Object>>,这样可以动态保存Matrix:

    {"PERSON_ID":"11601","cataracta":"N","AGE":"50","GENDER":"N"},{"PERSON_ID":"10211","cataracta":"N","AGE":"51","GENDER":"Y"}

    前端的排序请求体为:

    {"analyseId":0,"cohortDefId":1960,"filters":[],"currentPage":1,"sort":{"AGE":"ASC","GENDER":"DESC"}}

    主要是 sort 字段,排在前面的 AGE 优先级高于后面的 GENDER。明显地,AGE 是定量的值,GENDER是定性的。

    程序先要根据用户选择的排序列构造一个 comparator 的列表,数据的值类型决定了比较的方式(comparator 里面的比较逻辑实现)。Comparator 的实例构造的方法有限,不得不先取一个 comparator 作为 nullsFirst 方法的参数实例化,然后就可以对剩余的 comparator 串行化,最后总的排序实例传给被排序的数据集进行排序。

    LinkedList<Comparator<LinkedHashMap<String, Object>>> comparators = new LinkedList<>();
    for (String varName : sortMap.keySet()){
    	if ("NUM".equals(varTypes.get(varName))){ // NUM 表示变量是定量的值,要转化为 BigDecimal 后进行比较
    		try {
    			comparators.add((Comparator<LinkedHashMap<String, Object>> & Serializable) (
    					LinkedHashMap<String, Object> o1,
    					LinkedHashMap<String, Object> o2) -> new BigDecimal(String.valueOf(o1.get(varName)))
    							.compareTo(new BigDecimal(String.valueOf(o2.get(varName)))));
    		} catch (Exception e) {
    			logger.error("当前变量在转型时出错,错误为::" + e.getMessage());
    		}
    	} else { // 定性的转化为 String 直接比较
    		comparators.add((Comparator<LinkedHashMap<String, Object>> & Serializable) (
    				LinkedHashMap<String, Object> o1,
    				LinkedHashMap<String, Object> o2) -> String.valueOf(o1.get(varName))
    						.compareTo(String.valueOf(o2.get(varName))));
    	}
    }
    logger.info("完成排序驱动的实例化");
    Comparator sortings = Comparator.nullsFirst(comparators.poll()); // 先要构造一个 comparator 实例
    List<String> rest = new ArrayList<>(sortMap.values());
    rest.remove(rest.get(0));
    for (String asc : rest){
    	sortings = sortings.thenComparing("asc".equalsIgnoreCase(asc) ? comparators.poll() : comparators.poll().reversed());
    }
    list.sort(sortings);

     

    展开全文
  • 闭包又称词法闭包java闭包最先定义为一种包含和的实体.闭包解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在。函数解释二:闭包是函数和相关引用环境组成的实体。spa注::除了局部变量的...

    闭包又称词法闭包java

    闭包最先定义为一种包含和的实体.闭包

    解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在。函数

    解释二:闭包是函数和相关引用环境组成的实体。spa

    注::除了局部变量的其余变量code

    简单理解:闭包可以将一个方法做为一个变量去存储,这个方法有能力去访问所在类的自由变量。对象

    Java中闭包实现blog

    关键点:接口

    如何用变量去存储方法?ip

    java中可以保存方法的变量指的就是普通的对象资源

    如何让这个普通对象可以访问所在类的自由变量?

    纯自然的解决办法是:内部类。内部类可以访问外部类的全部属性及方法。

    隐藏具体实现是内部类的做用之一,如何保证隐藏具体实现的同时还能将闭包传递到外部使用?

    让内部类实现通用接口,而后将内部类对象向上转型为接口类型。

    上述解决办法就是Java最经常使用的闭包实现办法(内部类+接口)

    下面提供一个简单的实现

    public class Milk {

    public final static String name = "纯牛奶";//名称

    private static int num = 16;//数量

    public Milk()

    {

    System.out.println(name+":16/每箱");

    }

    /**

    * 闭包

    * @return 返回一个喝牛奶的动做

    */

    public Active HaveMeals()

    {

    return new Active()

    {

    public void drink()

    {

    if(num == 0)

    {

    System.out.println("木有了,都被你丫喝完了.");

    return;

    }

    num--;

    System.out.println("喝掉一瓶牛奶");

    }

    };

    }

    /**

    * 获取剩余数量

    */

    public void currentNum()

    {

    System.out.println(name+"剩余:"+num);

    }

    }

    /**

    * 通用接口

    */

    interface Active

    {

    void drink();

    }

    使用上述实现

    public class Person {

    public static void main(String[] args) {

    //买一箱牛奶

    Milk m = new Milk();

    Active haveMeals = m.HaveMeals();

    //没事喝一瓶

    haveMeals.drink();

    //有事喝一瓶

    haveMeals.drink();

    //看看还剩多少?

    m.currentNum();

    }

    }

    运行结果

    纯牛奶:16/每箱

    喝掉一瓶牛奶

    喝掉一瓶牛奶

    纯牛奶剩余:14

    上述例子中,经过调用Active的方法实现对Milk私有变量num进行修改。

    有时候以为直接使用set方法也能够直接修改private变量,可是从现实生活中来讲让人去执行喝牛奶的动做比牛奶本身动手喝来的合理一些。

    总结

    1.实际项目中没怎么用过闭包,所以不能对他的好坏进行评论。

    2.建议合理的使用闭包,不彻底不使用,也不能滥用。

    3.特别注意:闭包会致使资源不被回收,如上例,在main方法中将m设为null,使用haveMeals继续调用drink方法仍然会喝掉一瓶牛奶,说明Milk对象并无被释放掉。

    展开全文
  • Java中的与对象

    千次阅读 2016-07-13 19:50:21
    Java中的与对象 程序是实体在计算机中的体现,而对于一个实体主要是从属性和方法上面来描述,例如一个人就是一个实体。每一个人都有自己的名字,性别,年龄等,这些就是一个人所具有的属性,同时人还有学习、吃饭...
    Java中的类与对象
    程序是实体在计算机中的体现,而对于一个实体主要是从属性和方法上面来描述,例如一个人就是一个实体。每一个人都有自己的名字,性别,年龄等,这些就是一个人所具有的属性,同时人还有学习、吃饭、睡觉等,这些就是一个人所具有的方法。在现实生活中可找出很多事物作为实体,例如学生、教师、飞机、发动机等都是实体;在思维世界中许多的概念也可以作为一个实体,例如复数,矩阵,堆栈,队列等,它们也有自己的行为与方法。
    在程序中用类来描述这些实体的抽象概念。类就是一群具有相同属性和方法的实体的抽象,比如说一个中学生和一个大学生都是实体,而学号,姓名,性别,年级等是他们所具有的属性,学习、吃饭、睡觉等是他们共同具有的方法。我们现在让这些相同的属性和方法抽象出来形成一个学生类,同样具有中学生和大学生的方法和属性,这不过学生更加的抽象,更加的含糊,而一个大学生和中学生则具体的对应了两个实体。
    下面我们以“八神和猴子PK(回合制),每一次攻击,让对方的血量减少自己的攻击值,直到某一方血量为0,输出胜利方。”来讨论Java中的类与对象。
    第一步:分析场景中的对象。显然八神和猴子就是两个实体对象。
    第二步:分析对象的属性和方法。对于八神而言他的属性有自己的血量,攻击值,名字,方法就是攻击对手。同样的猴子同样也也具有自己的血量,攻击值,名字属性,方法是攻击对手
    第三步:分析对象之间的共同处。那就是都具有血量,攻击值,名字等属性,具有攻击对手的方法。
    下面是创建一个角色类:
    public class Character {
    	//血量属性
    	public int blood;
    	//设置攻击值
    	public int num;
    	//设置角色名字
    	public String name;
    	
    	//双方进行决斗
    	public void Pk(Character a){
    		//当血量大于0角色双方进行决斗,血量减少对方的攻击值
    		if(blood > 0 ){
    			a.blood=a.blood-num;
    			//输出此时对方的状态以便观察
    			System.out.println(name+"攻击"+a.name+","+a.name+"血量还剩"+a.blood);
    		}
    		//如果对方血量小于0输出胜利的一方
    		if(a.blood <= 0){
    			System.out.println(name+"为胜出的一方");
    		}
    	}
    }
    下面就是主方法的实现:
    public class Manager {
    
    	public static void main(String [] args){
    		//创建两个对象八神A和猴子A
    		Character bashen = new Character ();
    		Character houzi = new Character ();
    		//设置八神和猴子的属性
    		bashen.blood = 20;
    		houzi.blood = 20;
    		bashen.name = "八神";
    		houzi.name = "猴子";
    		bashen.num = 8;
    		houzi.num = 6;
    		//八神A和猴子A进行决斗。输出胜利的一方
    		while(bashenA.blood > 0 && houziA.blood > 0){
    			bashenA.Pk(houziA);
    			houziA.Pk(bashenA); 
    		}
    }
    
    下面为输出的结果:
    八神攻击猴子,猴子血量还剩12
    猴子攻击八神,八神血量还剩14
    八神攻击猴子,猴子血量还剩4
    猴子攻击八神,八神血量还剩8
    八神攻击猴子,猴子血量还剩-4
    八神为胜出的一方







    展开全文
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java二进制IO与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java二进制IO与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java二进制IO与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java二进制IO与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
  • 也就是说,是对象的抽象,而对象是在现实中的实体,这个实体可以是任何东西,人,物,抽象概念等等 那个创建一个需要什么呢? 一下给出代码的含义,这就是实体的抽象的结果,矩阵实体被分为数据(属性),...

    首先要清楚类和对象的关系,以及他们数据成员和成员函数的意义:
    先来个抽象一点的感受一下—>_—>
    在这里插入图片描述
    也就是说,类是对象的抽象,而对象是类在现实中的实体,这个实体可以是任何东西,人,物,抽象概念等等

    先来一个比较经典的容易理解的经典例子!
    我们要模拟一只猫,就要先对一只猫进行抽象,它有名字,会叫,分别对应这只猫的属性和行为,在代码里面,我们分别定义为字符串数据name,也即它的名字;和无参方法,cry,也就是叫的行为,方法里面是输出叫声
    然后再主方法里面创建一个猫的对象,并且起一个名字,然后调用叫的方法即可
    在这里插入图片描述

    在步入主题之前,再用一个稍难的例子,介绍一下静态函数与类的成员函数的区别(直接上图):

    这是他们调用方式上的区别,显然:如果函数定义为static,那么不需要创建“类的对象”就可以直接 函数 调用或者通过 类名.函数。

    在这里插入图片描述

    那个创建一个类需要什么呢?仍然用这个较难的例子

    首先创建一个类Matrix,即矩阵
    一下给出代码的含义,这就是实体的抽象的结果,矩阵实体被分为数据(属性),构造(构成要素),方法(行为)
    首先说明这里的this的含义,this就可以理解为 自己,因为构造函数传递过来的m和自己的属性m不一样,为了区别,this.m就是自己的m,而另一个m是构造函数的形式参数。
    在这里插入图片描述
    那么如何根据矩阵抽象类型创建一个实体呢?
    你可以在另一个类Test的main函数里面,或者Matrix的main函数里面写入以下代码(当然,任何函数里面都可以):

    int[][] element = {{1, 2, 3},{6, 5, 4},{8 ,9 ,7}};
    Matrix matrix = new Matrix(3, 3, element);
    //与上述构造方法对应,传入行数3,列数3,矩阵元素的数组element,用于构造一个矩阵。当如此操作之后,matrix的属性row就等于3,column等于3,元素element就等于这里的element。

    可见,刚刚的矩阵类也可以作为一种数据类型了,这就是引用类型,之前学习的int,double, char都是基本类型,而学习数组的时候有用过new,比如
    int[] array = new array[3];,数组也是引用类型,new就是创建一个数组实体的意思。

    然后可以通过 . 来调用这个矩阵实体的对象的属性

    System.out.println("矩阵的行数是 "+matrix.rows);
    System.out.println("矩阵第3行2列的元素是: "+ matrix.element[2][1]);

    输出的结果是:
    矩阵的行数是 3
    矩阵第3行2列的元素是: 9

    以上是查询矩阵的属性的过程,您也可以在Matrix里面(不是main函数里面就行)写入一下方法作为矩阵的行为:设置某个元素的数值

    public void set(int i, int j, int x) {
    		if (i >= 0 && j >= 0 && i < this.rows && j < this.columns)
    			this.element[i][j] = x;
    		throw new IndexOutOfBoundsException("i="+i+", j="+j);
    }
    

    然后主函数里面
    matrix.set(2, 2, 4);
    这样就把矩阵的第三行第三列的元素设置为了4

    System.out.println(matrix.element[2][2]);
    结果为4

    展开全文
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java二进制IO与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
  • 日历表格面板 [ConfigLine.java] 控制条 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法 [Pallet.java] 调色板,统一配色 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
  • 日历表格面板 [ConfigLine.java] 控制条 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法 [Pallet.java] 调色板,统一配色 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
  • 日历表格面板 [ConfigLine.java] 控制条 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法 [Pallet.java] 调色板,统一配色 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
  •  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
  •  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
  •  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
  •  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
  • 5.1 Java的定义 实例083 自定义图书 实例084 温度单位转换工具 实例085 域的默认初始化值 实例086 编写同名的方法 实例087 构造方法的应用 5.2 修饰符的使用 实例088 单例模式的应用 实例089 祖先的...
  • 5.1 Java的定义 实例083 自定义图书 实例084 温度单位转换工具 实例085 域的默认初始化值 实例086 编写同名的方法 实例087 构造方法的应用 5.2 修饰符的使用 实例088 单例模式的应用 实例089 祖先的...
  • 5.1 Java的定义 实例083 自定义图书 实例084 温度单位转换工具 实例085 域的默认初始化值 实例086 编写同名的方法 实例087 构造方法的应用 5.2 修饰符的使用 实例088 单例模式的应用 实例089 祖先的...
  • 5.1 Java的定义 实例083 自定义图书 实例084 温度单位转换工具 实例085 域的默认初始化值 实例086 编写同名的方法 实例087 构造方法的应用 5.2 修饰符的使用 实例088 单例模式的应用 实例089 祖先的...
  • 5.1 Java的定义 实例083 自定义图书 实例084 温度单位转换工具 实例085 域的默认初始化值 实例086 编写同名的方法 实例087 构造方法的应用 5.2 修饰符的使用 实例088 单例模式的应用 实例089 祖先的...
  •  一般情况下,读者应具有至少一个学期使用C、C++或Java编写程序的经验。相当多有关图形的编程涉及到将几何关系直接转换为代码,包括使用变量、函数、数组、循环和条件测试等,而这些东西在不同编程语言中都是类似的...
  • 2005-2009软件设计师历年真题

    千次下载 热门讨论 2010-05-18 19:20:10
     • 常用数值计算(误差、矩阵和行列式、近似求解方程、插值、数值积分)  • 排列组合、概率论应用、应用统计(数据的统计分析)  • 运算基本方法(预测与决策、线性规划、网络图、模拟)  1.5 常用数据结构 ...
  • Reason :跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。 ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能...
  • 修改核心支持库,为外部数据库的连接命令增加参数“不显示ODBC连接对话框”。 3. 修改核心支持库,解决用“播放音乐()”播放“音频采样大小为24位”的WAV文件时产生噪音的BUG。 4. 修改编译器,可以为编译出的...
  • windows 程序设计

    2011-07-24 21:16:30
    即使是在8088微处理器上跑的Windows 1.0也能进行这内存管理。在实际模式限制下,这种能力被认为是软件工程一个令人惊讶的成就。在Windows 1.0中,PC硬件结构的640KB内存限制,在不要求任何额外内存的情况下被有效...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

java实体类矩阵

java 订阅