java中对List进⾏分组和排序排序
对List进⾏排序,有两种办法
第⼀个是⽤java提供的⼯具类Collections提供的sort⽅法进⾏排序
废话不多说,上代码
⾸先定义⼀个Student
public class Student {
private int age;
java集合排序怎么实现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;
}
public Student(int age, String name) {
super();
this.age = age;
this.name = name;
}
}
下⾯是进⾏排序的代码
public static void main(String[] args) {
List<Student> list= new ArrayList<Student>();
list.add(new Student(5, "aa"));
list.add(new Student(7, "bb"));
list.add(new Student(6, "cc"));
Collections.sort(list,new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
//会把集合⾥⾯的对象两两传进⽅法⾥⾯⽐较,这⾥⽐较age,降序就O2-O1,升序就O1-O2 Age()-o1.getAge();
}
});
//打印list每⼀项的age
list.forEach(a -> System.out.Age()));
}
}
第⼆种⽅法:
List集合提供了sort⽅法,依然⽤Student做集合,进⾏排序
public static void main(String[] args) {
List<Student> list= new ArrayList<Student>();
list.add(new Student(5, "aa"));
list.add(new Student(7, "bb"));
list.add(new Student(6, "cc"));
//差别在这⾥,这⾥直接⽤list的sort⽅法,不需要吧list作为参数,其他的和Comparable排序是⼀样的
list.sort(new Comparator<Student>(){
@Override
public int compare(Studento1, Studento2) {
//会把集合⾥⾯的对象两两传进⽅法⾥⾯⽐较,这⾥⽐较age,降序就O2-O1,升序就O1-O2 Age()-o1.getAge();
}
});
//打印list每⼀项的age
list.forEach(a -> System.out.Age()));
}
}
对list进⾏分组:
同样的,⽤Student的集合作为⽰例,代码如下
public class test2 {
/**
* 创建⽐较器
*/
public static <T> List<List<T>> dividerList(List<T> list,Comparator<? super T> comparator) {
List<List<T>> lists = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
boolean isContain = false;
for (int j = 0; j < lists.size(); j++) {
if ((j).size() == 0||(j).get(0),(i)) == 0) {
<(j).(i));
isContain = true;
break;
}
}
if (!isContain) {
List<T> newList = new ArrayList<>();
newList.(i));
lists.add(newList);
}
}
return lists;
}
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
//实在不会起名字,⽤字母代替吧
list.add(new Student(17,"aa"));
list.add(new Student(15,"bb"));
list.add(new Student(16,"cc"));
list.add(new Student(15,"dd"));
list.add(new Student(16,"ee"));
list.add(new Student(17,"ff"));
List<List<Student>> list2 = dividerList(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// 按年龄分组,这⾥注意⼀点,返回的值为0,就会认为这两个Studeng是⼀组的,返回其他值,则认为不是,所以下⾯的-1可以替换为任意⾮0数字Age == o2.getAge ? 0:-1;
//也可以按照姓名分组,返回结果如下,因为是⽐较两个值是否相等,所以先后是没有区别的
//Name()Name())
}
});
for(List<Student> stList: list2){
stList.forEach(a -> System.out.Name+":"+a.getAge));
System.out.printIn("=========================================");
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论