根據(jù)list中對(duì)象的屬性去重和排序小結(jié)(必看篇)
更新時(shí)間:2017年05月20日 15:33:55 投稿:jingxian
下面小編就為大家?guī)硪黄鶕?jù)list中對(duì)象的屬性去重和排序小結(jié)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
如下所示:
//去重
public class User {
private int id;
private String name;
private int age;
public User(){}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
public class ListTest {
/**
* 有一個(gè)List<User> list 放了五個(gè)對(duì)象:user1、user2、user3、user4、user5
User有三個(gè)屬性Id、name、age
其中user2的記錄大概是這樣:“100”,"abc",20;
user3的記錄大概是這樣:“100”,“def”,20;
請(qǐng)問怎么才能只保留user2和user3中的一個(gè)對(duì)象,并將其中的name合并到新對(duì)象中,
新對(duì)象如“100”,“abcdef”,20
這只是舉個(gè)例子,實(shí)際中有可能user4和user5與此類似,如果有id相同的兩個(gè)對(duì)象,則對(duì)其進(jìn)行
合并,只保留一個(gè)對(duì)象,求一個(gè)通用的方法,能篩選出對(duì)象集合中某些相同ID的兩個(gè)對(duì)象,將其合并
仍保留在原list中
* @param args
*/
//list有序可重復(fù)、set無序不可重復(fù)、mapkey不允許重復(fù),key相同的后面的value會(huì)把前面的覆蓋掉
//List存放的數(shù)據(jù),默認(rèn)是按照放入時(shí)的順序存放的,比如依次放入A、B、C,則取得時(shí)候,則也是A、B、C的順序
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User(1,"a",20));
list.add(new User(1,"a",20));
list.add(new User(2,"a",20));
list.add(new User(3,"b",20));
list.add(new User(1,"c",20));
list.add(new User(4,"d",20));
list.add(new User(2,"e",20));
list.add(new User(1,"a",20));
/* for (User user : list) {
System.out.println(user.toString());
}
System.out.println();*/
list = mySort(list);
for (User user : list) {
System.out.println(user.toString());
}
}
public static List<User> mySort(List<User> list){
HashMap<Integer,User> tempMap = new HashMap<>();
for (User user : list) {
int key = user.getId();
// containsKey(Object key) 該方法判斷Map集合對(duì)象中是否包含指定的鍵名。如果Map集合中包含指定的鍵名,則返回true,否則返回false
// containsValue(Object value) value:要查詢的Map集合的指定鍵值對(duì)象.如果Map集合中包含指定的鍵值,則返回true,否則返回false
if(tempMap.containsKey(key)){
User tempUser = new User(key,
tempMap.get(key).getName() + user.getName(),
tempMap.get(key).getAge());//user.getAge();
//HashMap是不允許key重復(fù)的,所以如果有key重復(fù)的話,那么前面的value會(huì)被后面的value覆蓋
tempMap.put(key, tempUser);
}else{
tempMap.put(key, user);
}
}
List<User> tempList = new ArrayList<>();
for(int key : tempMap.keySet()){
tempList.add(tempMap.get(key));
}
return tempList;
}
}
//排序=============================================
public class Student {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
}
public class ListSort {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
//創(chuàng)建3個(gè)學(xué)生對(duì)象,年齡分別是20、19、21,并將他們依次放入List中
Student s1 = new Student();
s1.setAge(20);
s1.setName("葛大");
Student s2 = new Student();
s2.setAge(19);
s2.setName("張杰");
Student s3 = new Student();
s3.setAge(21);
s3.setName("寶爺");
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println("排序前:"+list);
Collections.sort(list, new Comparator<Student>(){
/*
* int compare(Student o1, Student o2) 返回一個(gè)基本類型的整型,
* 返回負(fù)數(shù)表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正數(shù)表示:o1大于o2。
*/
public int compare(Student o1, Student o2) {
//按照學(xué)生的年齡進(jìn)行升序排列 ;<是降序
// /*if(o1.getAge() > o2.getAge()){
// return 1;
// }
// if(o1.getAge() == o2.getAge()){
// return 0;
// }
// return -1; */
// return o1.getAge()-o2.getAge();//升序
// return o2.getAge()-o1.getAge();//降序
return o1.getName().compareTo(o2.getName()) ;// 按照姓名升序
// return o2.getName().compareTo(o1.getName()) ;// 按照姓名降序
}
});
System.out.println("排序后:"+list);
}
}
以上這篇根據(jù)list中對(duì)象的屬性去重和排序小結(jié)(必看篇)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳談ServiceLoader實(shí)現(xiàn)原理
下面小編就為大家?guī)硪黄斦凷erviceLoader實(shí)現(xiàn)原理。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
Spring?boot詳解fastjson過濾字段為null值如何解決
這篇文章主要介紹了解決Spring?boot中fastjson過濾字段為null值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
JMeter自定義日志與日志分析的實(shí)現(xiàn)
JMeter與Java程序一樣,會(huì)記錄事件日志,本文就介紹一下JMeter自定義日志與日志分析的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計(jì)示例
本篇文章主要介紹了基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計(jì)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
Java實(shí)現(xiàn)簡(jiǎn)易的分詞器功能
搜索功能是具備數(shù)據(jù)庫功能的系統(tǒng)的一大重要特性和功能,生活中常見的搜索功能基本上都具備了分詞搜索功能.然而ES功能固然強(qiáng)大,但對(duì)于學(xué)生或小項(xiàng)目而言整合起來太費(fèi)人力物力,若是寫個(gè)分詞器就會(huì)使項(xiàng)目錦上添花,使其不僅僅是只能單關(guān)鍵詞搜索的系統(tǒng),需要的朋友可以參考下2021-06-06
java集合之CopyOnWriteArrayList源碼解析
這篇文章主要介紹了java集合之CopyOnWriteArrayList源碼解析,容器array是volatile修飾的,即set和get方法都是線程安全的,整個(gè)添加過程上了鎖,所以整體是通過volatile和lock來保證的線程安全,需要的朋友可以參考下2023-12-12

