List 对象排序 Demo
项目目录结构:
简单POJO Person.java
package com.royal.model;
public class Person {
private String name;
private int age;
public Person(){
}
public Person (String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
一个List对象排序的工具类
SortList.java
package com.royal.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
*
* @Description: TODO(List排序工具类)
*
*/
public class SortList<E> {
public void sort(List<E> list, final String method, final String sort) {
Collections.sort(list, new Comparator() {
@Override
public int compare(Object a, Object b) {
int ret = 0;
try {
Method m1 = ((E) a).getClass().getMethod(method, null);
Method m2 = ((E) b).getClass().getMethod(method, null);
if (sort != null && "desc".equals(sort)) {
// 倒序
ret = m2.invoke(((E) b), null).toString().compareTo(m1.invoke(((E) a), null).toString());
} else {
// 正序
ret = m1.invoke(((E) a), null).toString().compareTo(m2.invoke(((E) b), null).toString());
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ret;
}
});
}
}
工具类的测试使用
SortListClient.java
package com.royal.test;
import java.util.ArrayList;
import java.util.List;
import com.royal.model.Person;
import com.royal.util.SortList;
public class SortListClient {
public static void main(String[] args){
Person p1 = new Person("royal",18);
Person p2 = new Person("萧_瑟",20);
List<Person> personList = new ArrayList<Person>();
personList.add(p1);
personList.add(p2);
SortList<Person> sortList = new SortList<Person>();
System.out.println("-----原来的序列-----");
for(Person p : personList){
System.out.println(p.getName() + "\t" + p.getAge());
}
System.out.println("-----按age正序排序-----");
sortList.sort(personList, "getAge", null);
for(Person p : personList){
System.out.println(p.getName() + "\t" + p.getAge());
}
System.out.println("-----按age倒序排序-----");
sortList.sort(personList, "getAge", "desc");
for(Person p : personList){
System.out.println(p.getName() + "\t" + p.getAge());
}
}
}
测试结果:
参考:http://wenku.baidu.com/view/a19a50ea81c758f5f61f674a.html
- 大小: 5.8 KB
- 大小: 9 KB
分享到:
相关推荐
本篇将详细介绍如何根据指定字段对`List`中的对象进行排序,以`Student`类为例,假设每个`Student`都有一个`grad`属性表示成绩。 首先,我们需要创建`Student`类,定义`grad`属性和getter/setter方法: ```java ...
以下是对这个“c#排序demo”的详细解析。 首先,我们需要一个包含名字和年龄属性的对象模型。例如,我们可以定义一个名为`Person`的类: ```csharp public class Person { public string Name { get; set; } ...
虽然这个DEMO可能没有直接涉及 `TList` 的资源操作,但在实际应用中,我们可能需要为 `TList` 中的对象分配资源,例如为自定义对象创建图标或字符串。 `TlistStudy.identcache` 和 `TlistStudy.dproj.local` 是...
本Demo源代码着重展示了ListCtrl控件的各种使用技巧,帮助开发者更好地理解和运用这个控件。 ListCtrl控件是MFC(Microsoft Foundation Classes)库中的一个重要组件,它基于Windows API中的ListView控件。通过List...
在Java编程语言中,集合框架是处理对象组的重要工具,主要包括`List`、`Set`和`Map`接口。这些接口及其实现类提供了丰富的功能,适用于各种数据存储和操作需求。`Set-List-Map.rar_DEMO_list set map`这个压缩包文件...
给项目命名为“ListViewDemo”。 接下来,我们需要在窗体上添加ListView控件。从工具箱中拖动ListView控件到窗体上,并调整其大小和位置。默认情况下,ListView控件可能没有列,我们需要手动添加。在属性窗口中,...
在`QListWidget`的Demo中,可能还会涉及一些高级功能,如自定义项的大小、选择模式(单选或多选)、排序功能以及使用`QListWidgetItem`的子类实现自定义行为。例如,可以设置`QListWidget`的`viewMode`为`...
C#提供了多种排序算法,如快速排序、冒泡排序或内置的`Array.Sort()`和`List<T>.Sort()`方法。开发者可以根据实际需求选择合适的排序策略,确保数据在打印前按照预期顺序排列。 "打印预览"是现代打印应用中的重要...
拖放操作是用户界面设计中的一个常见功能,它使得用户可以通过鼠标或触摸设备抓取一个对象,然后将其移动到目标位置释放。在Windows应用程序中,拖放功能常用于文件管理器、邮件客户端、项目管理工具等,提高了数据...
`CSort_in_list_ctrlDlg`对话框类中包含一个`CSortList`对象,并在`OnInitDialog`中初始化列表数据。当用户点击列头时,`OnColumnclickList1`函数会被调用,对列表进行排序。 总的来说,实现CListCtrl排序的关键...
- 支持多种视图模式:Icon(图标)、List(列表)、SmallIcon(小图标)和Details(详细信息)。 - 可以添加多个列,每个列可以显示不同的信息。 - 支持复选框、图像列表以及自定义排序功能。 2. **添加和管理列...
例如,`Demo4-30`可能展示了排序算法(如`std::sort`),`Demo4-22`可能是关于查找算法(如`std::find`),`Demo4-5`可能涉及到复制操作(如`std::copy`),而`Demo4-31`可能涉及了算法的组合使用,如遍历、过滤和...
本篇文章将深入探讨如何扩展MFC ListControl的功能,特别是实现按字符串、日期和数字的排序,并讲解如何通过点击列表头来触发排序操作。 首先,我们需要了解ListControl的基本结构。在MFC中,ListControl控件是...
它提供了对象关系映射(ORM)功能,使得开发者可以更方便地处理数据存储和检索,而无需深度理解底层SQL语法。在"RealmDemo简单测试使用"这个项目中,我们将深入探讨如何在实际应用中运用Realm进行基本的数据操作,...
1. **创建对象**:首先,你需要创建一个`QListWidget`实例,例如: ```python list_widget = QListWidget() ``` 2. **添加项**:接着,你可以使用`addItem`方法添加单个项,或者使用`addItems`方法一次性添加多...
3. **STL(Standard Template Library)**:容器(如vector、list、set、map)、迭代器、算法(如排序、查找)、函数对象(functors)等。 4. **模板**:函数模板、类模板,以及模板特化和偏特化。 5. **异常处理*...
在Java编程语言中,集合框架是核心特性之一,它提供了数据结构和算法的实现,使得开发者可以方便地存储和操作对象。本示例主要探讨的是Java集合类的简单使用,通过一个名为`CollectionsTest.java`的文件进行演示。这...
在这个"Dev GridView绑定测试demo"中,我们将探讨如何利用`GridView`绑定不同的数据源,包括`List<T>`、`BindingList<T>`以及`BindingSource`。这些技术对于任何需要在用户界面中显示动态数据的开发者来说都是至关...