多个字段排序的时候,按照你在order by 之中指定的顺序进行排列的。 select * form tbl1 order by col1 desc, col2, col3 如上面, 先按照col1 的值递减排列, 如果col1的值相同,则按照col2来排列, 如果col1和col2的值都相同,则按照col3的值进行排列。 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public class SortTest { static Map<String, Integer> sortNameMap = new HashMap<String, Integer>(); static { sortNameMap.put("张三", 1); sortNameMap.put("王五", 2); sortNameMap.put("赵六", 3); sortNameMap.put("李四", 4); } public static Integer getSortNameMapByKey(String key) { for (String s : sortNameMap.keySet()) { if (key.contains(s)) { return sortNameMap.get(s); } } return sortNameMap.size() + 1; } public static <T> void sort(List<T> list, final List<Comparator<T>> comparatorList) { if (comparatorList.isEmpty()) {// Always equals, if no Comparator. throw new IllegalArgumentException("comparatorList is empty."); } Comparator<T> comparator = new Comparator<T>() { public int compare(T o1, T o2) { for (Comparator<T> c : comparatorList) { if (c.compare(o1, o2) > 0) { return 1; } else if (c.compare(o1, o2) < 0) { return -1; } } return 0; } }; Collections.sort(list, comparator); } public static <E> void sortByMethod(List<E> list, final String method, final boolean reverseFlag) { Collections.sort(list, new Comparator<Object>() { @SuppressWarnings("unchecked") public int compare(Object arg1, Object arg2) { int result = 0; try { Method m1 = ((E) arg1).getClass().getMethod(method, null); Method m2 = ((E) arg2).getClass().getMethod(method, null); Object obj1 = m1.invoke(((E) arg1), null); Object obj2 = m2.invoke(((E) arg2), null); if (obj1 instanceof String) { if (method.toLowerCase().contains("name")) { Integer sort1 = getSortNameMapByKey((String) (obj1)); Integer sort2 = getSortNameMapByKey((String) (obj2)); result = sort1.compareTo(sort2); } else { // 字符串 result = obj1.toString().compareTo(obj2.toString()); } } else if (obj1 instanceof Date) { // 日期 long l = ((Date) obj1).getTime() - ((Date) obj2).getTime(); if (l > 0) { result = 1; } else if (l < 0) { result = -1; } else { result = 0; } } else if (obj1 instanceof Integer) { // 整型(Method的返回参数可以是int的,因为JDK1.5之后,Integer与int可以自动转换了) result = (Integer) obj1 - (Integer) obj2; } else { // 目前尚不支持的对象,直接转换为String,然后比较,后果未知 result = obj1.toString().compareTo(obj2.toString()); System.err .println("MySortList.sortByMethod方法接受到不可识别的对象类型,转换为字符串后比较返回..."); } if (reverseFlag) { // 倒序 result = -result; } } catch (NoSuchMethodException nsme) { nsme.printStackTrace(); } catch (IllegalAccessException iae) { iae.printStackTrace(); } catch (InvocationTargetException ite) { ite.printStackTrace(); } return result; } }); } public static <E> int compareTo(Object arg1, Object arg2, String method, boolean reverseFlag) { int result = 0; try { Method m1 = ((E) arg1).getClass().getMethod(method, null); Method m2 = ((E) arg2).getClass().getMethod(method, null); Object obj1 = m1.invoke(((E) arg1), null); Object obj2 = m2.invoke(((E) arg2), null); if (obj1 instanceof String) { if (method.toLowerCase().contains("name")) { Integer sort1 = getSortNameMapByKey((String) (obj1)); Integer sort2 = getSortNameMapByKey((String) (obj2)); result = sort1.compareTo(sort2); } else { // 字符串 result = obj1.toString().compareTo(obj2.toString()); } } else if (obj1 instanceof Date) { // 日期 long l = ((Date) obj1).getTime() - ((Date) obj2).getTime(); if (l > 0) { result = 1; } else if (l < 0) { result = -1; } else { result = 0; } } else if (obj1 instanceof Integer) { // 整型(Method的返回参数可以是int的,因为JDK1.5之后,Integer与int可以自动转换了) result = (Integer) obj1 - (Integer) obj2; } else { // 目前尚不支持的对象,直接转换为String,然后比较,后果未知 result = obj1.toString().compareTo(obj2.toString()); System.err .println("MySortList.sortByMethod方法接受到不可识别的对象类型,转换为字符串后比较返回..."); } if (reverseFlag) { // 倒序 result = -result; } } catch (NoSuchMethodException nsme) { nsme.printStackTrace(); } catch (IllegalAccessException iae) { iae.printStackTrace(); } catch (InvocationTargetException ite) { ite.printStackTrace(); } return result; } public static <E> void sortByMethods(List<E> list, final boolean reverseFlag, final String... methods) { Collections.sort(list, new Comparator<Object>() { @SuppressWarnings("unchecked") public int compare(Object arg1, Object arg2) { int result = 0; for (String m : methods) { result = compareTo(arg1, arg2, m, reverseFlag); if (result != 0) { return result; } else { result = compareTo(arg1, arg2, m, reverseFlag); } } return result; } }); } public static void main(String[] args) { System.out.println("2".compareTo("1")); List<Person> list = new ArrayList<Person>(); Person p = new Person(); p.setId(1); p.setName("张三111"); list.add(p); p = new Person(); p.setId(2); p.setName("李四111"); list.add(p); p = new Person(); p.setId(3); p.setName("王五111"); list.add(p); p = new Person(); p.setId(4); p.setName("王五111"); list.add(p); p = new Person(); p.setId(40); p.setName("赵六1111"); list.add(p); p = new Person(); p.setId(5); p.setName("赵六1111"); list.add(p); p = new Person(); p.setId(5); p.setName("小王1111"); list.add(p); p = new Person(); p.setId(6); p.setName("老王1111"); list.add(p); sortByMethods(list, false, "getName","getId"); System.out.println("中文名称正序排列:"); for (Person pp : list) { System.out.println(pp.getId() + "," + pp.getName()); } /* * sortByMethod(list, "getName", false); * System.out.println("中文名称正序排列:"); for (Person pp : list) { * System.out.println(pp.getId() + "," + pp.getName()); } * * sortByMethod(list, "getId", false); System.out.println("中文名称正序排列:"); * for (Person pp : list) { System.out.println(pp.getId() + "," + * pp.getName()); } */ } } class Person { private int id; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
相关推荐
OrderByInterceptor,配合PageHelper实现字段排序插件,前端传入要排序的字段和排序规则,插件自动将实体字段映射成数据库字段,不用设置表明前缀。插件通过ResultMap或ResultType读取映射关系,若没有设置,则根据...
如果我们需要对一个对象列表中的某个字段(如年龄)进行排序,可以创建一个 `Comparator` 实现。 ```java import java.util.*; import java.text.*; public class JobCandidateSort { public static void main...
### 使用Java实现数据库编程知识点详解 #### 一、数据库的设计 **1. 规范设计数据库的步骤** - **收集信息**:明确需求,包括业务流程、数据需求等。 - **标识实体**:识别出系统中需要存储的主要对象或概念。 - ...
### List 数据字段排序不关注数据库,直接排序 在 Java 开发过程中,经常需要对 List 集合中的数据进行排序处理。本篇文章介绍一种方法,该方法能够在内存中直接对 List 对象的数据字段进行排序,而无需直接操作...
Java 中 List 排序是指在数据库中查出来的列表中对不同的字段重新排序。一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高系统的性能。这样...
这样,表中的`name`字段将以拼音顺序进行排序。 4. 考虑兼容性和性能: 自定义Collation可能会对性能产生影响,特别是在大数据量的表上。因此,在实际应用中,需要权衡排序的准确性和性能。如果性能成为问题,可以...
这涉及到数据库中的表设计,可能包括学生ID、课程ID、分数等字段,通过JAVA程序进行CRUD(创建、读取、更新、删除)操作。 2. 教师信息管理:支持添加和查询教师的基本信息,如姓名、职称、所教课程等。这部分同样...
在Java中,实现这个功能通常涉及以下步骤: 1. **数据结构准备**:创建类来表示`TableA`和`TableB`的行,每个类都有`id`属性和其他所需字段。例如,`TableRowA`和`TableRowB`。 2. **读取数据**:从数据源(如CSV...
通过以上步骤,我们就可以利用`pinyin4j`库实现Java中对中文字符串的拼音排序了。这个方法在处理大量中文数据时尤其有用,比如构建中文搜索引擎、整理中文数据库等场景。不过,需要注意的是,这种方法并不完全符合...
在Java中,不同的Map实现有不同的特性。HashMap不保证元素的顺序,而TreeMap按照键的自然顺序或自定义比较器进行排序。LinkedHashMap则按照元素添加的顺序(FIFO,先进先出)来维护其内部顺序,这在构建字段列表时很...
在Java编程中,实现输入汉字拼音首...以上就是Java中实现输入汉字拼音首字母自动显示数据库中相应内容的基本步骤。实际开发中,可能还需要考虑到多线程、异常处理、国际化支持等复杂因素,以确保功能的稳定性和可用性。
在给出的标题"java汉字笔画排序2例子及jar包"中,我们可以推断这是一个关于Java实现汉字笔画排序的项目,其中可能包含了两种不同的实现方式或者优化后的版本。 描述中提到,"对排序方法重新定义,减少占用,效率...
导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构...
该类代表了数据库表中的每一行,并且包含了五个字段:名称、长度、重量、威力、价格。 ```java public class MyRow { private String name; // 名称 private double length; // 长度 private double weight; // ...
`TreeMap`是Java集合框架中的一个实现,它继承自`AbstractMap`并实现了`SortedMap`接口。`TreeMap`内部使用红黑树数据结构,可以保证插入的元素按照指定的比较器(默认是自然顺序,即ASCII码顺序)自动排序。在本例...
本文通过具体的代码示例介绍了如何在Java中使用Hibernate框架来实现数据库的基本CRUD操作。这些操作对于任何涉及到数据持久化的项目都是必不可少的。通过理解这些核心概念和技术细节,开发者可以更好地利用Java和...
- 在Java中,使用JDBC(Java Database Connectivity) API连接和操作数据库,包括加载驱动、建立连接、执行SQL语句和处理结果集等步骤。 9. **用户界面**: - GUI(图形用户界面)设计,如Swing或JavaFX,用于...
总的来说,这个数据库学生图书管理系统是一个综合性的项目,涉及到数据库设计、Java编程、Web开发等多个领域,对开发者的技术要求较高。通过实践这样的项目,开发者可以提升自己的全栈开发能力,同时深入理解数据...
Web 中拖拽排序和 Java 后台交互实现方法示例 本文主要介绍了 Web 中拖拽排序和 Java 后台交互实现的相关知识点,通过示例代码详细介绍了如何实现拖拽排序和 Java 后台交互。 一、业务需求 在 Web 中,为了实现...
数据库是存储和管理数据的核心工具,对于Java程序员来说,了解数据库的基础知识至关重要。这份面试题涵盖了数据库系统的基本架构、用户分类、设计流程、数据完整性、SQL操作等方面,旨在帮助求职者提升对数据库的...