2つのlistセットをマージしてソート
4778 ワード
集合合成なら
List list1 = new ArrayList(); /*.....データの追加....*/List list2 = new ArrayList(); /*.....データの追加....*/list1.addAll(list2);
一、比較対象オブジェクトはComparableインタフェースのcomparareTo方法を実現する必要がある
テストコード
出力結果
b
a
a
b
二、比較器Comparator実装comparareメソッドをカスタマイズする(ここでは匿名内部クラスの形式を採用する)
入力コンパレータ、テストコード
三、多属性比較
id属性を追加
テストコード
参考記事:
http://zhidao.baidu.com/link?url=pLKlH1ymBXeFBnYsadJc_UhC4N6yJRmovyp_DJlC9pAvJrrLemK6IkDVnjtdm7bYXGTocVtm-9EXfb7YvH9B1a
List
一、比較対象オブジェクトはComparableインタフェースのcomparareTo方法を実現する必要がある
/**
* order User
*/
public class User implements Comparable<User>{
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public int compareTo(User arg0) {
return this.getOrder().compareTo(arg0.getOrder());
}
}
テストコード
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List <User> list = new ArrayList<User>();
// add user2 add user1
list.add(user2);
list.add(user1);
for(User u : list){
System.out.println(u.getName());
}
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
}
出力結果
b
a
a
b
二、比較器Comparator実装comparareメソッドをカスタマイズする(ここでは匿名内部クラスの形式を採用する)
/**
* order User
*/
public class User {// Comparable
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
}
入力コンパレータ、テストコード
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List<User> list = new ArrayList<User> ();
list.add(user2);
list.add(user1);
Collections.sort(list,new Comparator<User>(){
public int compare(User arg0, User arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});
for(User u : list){
System.out.println(u.getName());
}
}
}
三、多属性比較
id属性を追加
/**
*
*/
public class User {
private Integer id;
private String name;
private Integer order;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
}
テストコード
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setId(1);
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setId(2);
user2.setName("a");
user2.setOrder(1);
List<User> list = new ArrayList<User> ();
list.add(user2);
list.add(user1);
Collections.sort(list,new Comparator<User>(){
public int compare(User arg0, User arg1) {
// order
int i = arg0.getOrder().compareTo(arg1.getOrder());
// order name
if(i==0){
int j= arg0.getName().compareTo(arg1.getName());
// name id
if (j==0){
return arg0.getId().compareTo(arg1.getId());
}
return j;
}
return i;
}
});
for(User u : list){
System.out.println(u.getId());
}
}
}
参考記事:
http://zhidao.baidu.com/link?url=pLKlH1ymBXeFBnYsadJc_UhC4N6yJRmovyp_DJlC9pAvJrrLemK6IkDVnjtdm7bYXGTocVtm-9EXfb7YvH9B1a