• ## groovy给list排序

千次阅读 2018-04-10 16:29:27
groovy List 多字段排序List&lt;Map&lt;String, Object&gt;&gt; list = [["loc": "A-02-01","code":"asdf"],["loc": "B-01-01","...
groovy List 多字段排序

List<Map<String, Object>> list = [["loc": "A-02-01","code":"asdf"],["loc": "B-01-01","code":"ff"],
["loc": "B-01-01","code":"23"], ["loc": "A-01-04","code":"ghg"]]
list.sort{a,b->
if (a.loc < b.loc) {
return -1
}else if (a.loc == b.loc) {
a.code.compareTo(b.code)
} else {
return 1
}
}

Result: [[loc:A-01-04, code:ghg], [loc:A-02-01, code:asdf], [loc:B-01-01, code:23], [loc:B-01-01, code:ff]]

package test.tool.gui.dbtool.util;    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) {                    List<Student> list = new ArrayList<Student>();                    //创建3个学生对象，年龄分别是20、19、21，并将他们依次放入List中          Student s1 = new Student();          s1.setAge(20);          Student s2 = new Student();          s2.setAge(19);          Student s3 = new Student();          s3.setAge(21);          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) 返回一个基本类型的整型，               * 返回负数表示：o1 小于o2，               * 返回0 表示：o1和o2相等，               * 返回正数表示：o1大于o2。               */              public int compare(Student o1, Student o2) {                                //按照学生的年龄进行升序排列                  if(o1.getAge() > o2.getAge()){                      return 1;                  }                  if(o1.getAge() == o2.getAge()){                      return 0;                  }                  return -1;              }          });           System.out.println("排序后："+list);      }  }  class Student{            private int age;        public int getAge() {          return age;      }        public void setAge(int age) {          this.age = age;      }      @Override      public String toString() {          return getAge()+"";      }  }

展开全文
• ## scala list排序

千次阅读 2019-10-11 18:34:16
现在有一个List，需要对其进行排序 val a = List(("a",2),("b",44),("c",20),("a",20)) 1、对int值进行排序 val d = a.sortBy(_._2).reverse println(d.mkString(" - ")) 结果： (b,44) - (a,20) - (c,20) - (a,2)...
现在有一个List，需要对其进行排序
val a = List(("a",2),("b",44),("c",20),("a",20))

1、对int值进行排序
val d = a.sortBy(_._2).reverse
println(d.mkString(" - "))

结果：
(b,44) - (a,20) - (c,20) - (a,2)

2、先对int值进行排序，再对string值 进行排序
val c = a.sortBy(r=>(r._2,r._1))(Ordering.Tuple2(Ordering.Int.reverse,Ordering.String.reverse))
println(c.mkString(" - "))

结果：
(b,44) - (c,20) - (a,20) - (a,2)

展开全文
• ## 实现集合List中的元素进行排序

万次阅读 多人点赞 2016-06-14 22:08:32
Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序，这就需要用到 Java中提供的对集合进行操作的工具类Collections，其中的sort方法 先看一个简单的例子： public static ...

Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序，这就需要用到

Java中提供的对集合进行操作的工具类Collections，其中的sort方法

先看一个简单的例子：

public static void main(String[] args) {
List<Integer> nums = new ArrayList<Integer>();
System.out.println(nums);
Collections.sort(nums);
System.out.println(nums);
}
输出结果： [3, 5, 1, 0] [0, 1, 3, 5]

稍微复杂的List里面放一个复杂的对象

package core.java.collection.collections;

public class User implements Comparable<User>{

private int score;

private int age;

public User(int score, int age){
super();
this.score = score;
this.age = age;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public int compareTo(User o) {
int i = this.getAge() - o.getAge();//先按照年龄排序
if(i == 0){
return this.score - o.getScore();//如果年龄相等了再用分数进行排序
}
return i;
}

}

public static void main(String[] args) {
List<User> users = new ArrayList<User>();
Collections.sort(users);
for(User user : users){
System.out.println(user.getScore() + "," + user.getAge());
}
}
输出结果： 55,23 67,23 78,26 34,56 我们会发现sort(List<T>)方法中List中的T必须实现Comparable<T>接口，然后实现 compareTo（）方法，该方法的返回值0代表相等，1表示大于，-1表示小于；为什么 在简单例子中没有看到实现Comparable接口呢？是因为Integer类其实自己已经实现 了Comparable接口，Java已经给我们做好了。 Collections提供的第二种排序方法sort(List<T> list, Comparator<? super T> c) 先看例子：
package core.java.collection.collections;

public class Students {

private int age;
private int score;

public Students(int age, int score){
super();
this.age = age;
this.score = score;
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
public static void main(String[] args) {
List<Students> students = new ArrayList<Students>();
Collections.sort(students, new Comparator<Students>() {

@Override
public int compare(Students o1, Students o2) {
int i = o1.getScore() - o2.getScore();
if(i == 0){
return o1.getAge() - o2.getAge();
}
return i;
}
});
for(Students stu : students){
System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
}
}
输出结果： score:89:age22 score:98:age27 score:98:age29 score:99:age29 score:100:age23 从上面的例子我们可以看出Students类没有实现Comparable<T>接口，只是在sort()方法 中多传入一个参数，只不过该参数是一个接口我们需要实现其compare方法。 以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。


展开全文
• ## List排序

万次阅读 2010-12-22 19:47:00
在使用这些泛型集合时我们有时需要对其进行排序，下面我们就一块看一下List如何进行排序（像Dictionary也有其相应的排序方式，例如说使用Linq语法方式，今天暂且不说）。 主要内容： 初始工作 默认排序方式 通过...
摘要：在面向对象开发过程中我们经常将一组对象放到一个特定集合中，此时我们通常使用泛型集合来存放，常见的如：List 、Dictionary等。在使用这些泛型集合时我们有时需要对其进行排序，下面我们就一块看一下List如何进行排序（像Dictionary也有其相应的排序方式，例如说使用Linq语法方式，今天暂且不说）。
主要内容：
初始工作 默认排序方式 通过自定义比较器进行排序 设定排序范围 总结
一、初始工作
假设我们有一个Student对象，简单起见这个对象只有三个属性，分别是学好、姓名、年龄。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class Student
{
public Student()
{
}
public Student(string no, string name, int age)
{
this.No = no;
this.Name = name;
this.Age = age;
}
public string No
{
get;
set;
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
}

我们有四个学生，分别存放在List中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>();
Console.WriteLine("未进行排序之前：");
foreach (Student st in students)
{
Console.WriteLine(st.No+","+st.Name+","+st.Age+";");
}
}
}
}

很明显我们往students对象中加入学生的时候并没有顺序，下面我们就一起看一下如何对students集合按照年龄由小到大来排序。
二、默认排序方式
如果你查一下List的API的话，我们会看到对于List的Sort方法有四种重载，首先在这里我们说一下第一种，也就是无参数的情况：List.Sort ()  。那么我能不能直接对students集合使用Sort()方法进行排序呢？答案是否定的，如果我们使用下面的方法排序的话系统将抛出System.InvalidOperationException异常。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>();
Console.WriteLine("未进行排序之前：");
foreach (Student st in students)
{
Console.WriteLine(st.No+","+st.Name+","+st.Age+";");
}
Console.WriteLine("List.Sort () 排序之后：");
students.Sort();
foreach (Student st in students)
{
Console.WriteLine(st.No + "," + st.Name + "," + st.Age + ";");
}
}
}
}

执行上面的代码将抛出如下异常

从图中的提示我们可以看出错误原因是由于进行比较的对象并未有任何一个实现IComparable接口，因此也就无法完成排序。事实上对于无参Sort()方法是使用Comparer.Default比较器来排序的，而此比较器进行比较时首先就会检查T是否实现了IComparable泛型接口，如果实现了则使用该实现。否则将坚持是否实现了IComparable接口。如果均未实现则引发InvalidOperationException异常。也就是说如果想使用此方法需要实现ICompara泛型接口或者IComparable接口，因此我们暂且修改一下Student类，实现IComparable接口（除了这个例子职务后面的例子仍然使用第一步我们建立的Student类）。
首先修改Student类，实现IComparable接口：
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class Student:IComparable
{
public Student()
{
}
public Student(string no, string name, int age)
{
this.No = no;
this.Name = name;
this.Age = age;
}
public string No
{
get;
set;
}
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
#region IComparable 成员
public int CompareTo(object obj)
{
if (obj is Student)
{
Student tempStudent = obj as Student;
return this.Age.CompareTo(tempStudent.Age);
}
throw new NotImplementedException("obj is not a Student!");
}
#endregion
}
}

然后我们再运行程序就会看到可以按照我们的想法去排序了。
接着再使用Sort()排序的话就可以看到如下排序成功的界面：

三、通过自定义比较器进行排序
尽管我们上面说过可以使用Sort()方法排序，但是要求Student必须实现IComparable泛型接口或接口，那么我们有没有其他的方法呢？其实是有的，个人感觉这种方法多数情况下会更好一些。那就是：List.Sort (泛型 Comparison)  和List.Sort (泛型 IComparer)  方法。之所以将这两种重载放到一起来说，是因为二者在使用范围上很类似。首先看一下List.Sort (泛型 Comparison)  方法，此方法的参数是Comparison类型，其实是一个包含两个参数的委托，因此使用此方法，我们只需要定义一个委托，其两个参数均为Student类型，在委托实现的方法比较两个Student对象的Age属性即可。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>();
Console.WriteLine("未进行排序之前：");
foreach (Student st in students)
{
Console.WriteLine(st.No+","+st.Name+","+st.Age+";");
}
Console.WriteLine("List.Sort (泛型 Comparison) 排序之后：");
students.Sort(delegate(Student a, Student b) { return a.Age.CompareTo(b.Age); });
foreach (Student st in students)
{
Console.WriteLine(st.No + "," + st.Name + "," + st.Age + ";");
}
}
}
}

运行结果（注意此时以及下面的所有例子中Student均不需要实现IComparable泛型接口或接口）：

接着我们看一下List.Sort (泛型 IComparer)  ，此方法需要一个泛型IComparer接口类型，因此只要定义一个类实现此接口然后再调用此方法即可。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class StudentCompare :IComparer<Student>
{
public int Compare(Student a, Student b)
{
return a.Age.CompareTo(b.Age);
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>();
Console.WriteLine("未进行排序之前：");
foreach (Student st in students)
{
Console.WriteLine(st.No+","+st.Name+","+st.Age+";");
}
Console.WriteLine("List.Sort (泛型 IComparer) 排序之后：");
students.Sort(new StudentCompare());
foreach (Student st in students)
{
Console.WriteLine(st.No + "," + st.Name + "," + st.Age + ";");
}
}
}
}

运行效果：

四、设定排序范围
虽然上面的方法都实现了泛型集合排序，但是有时我们并不需要对整个集合进行排序而是指对其中一定范围内容的对象进行排序，那么我们就需要使用Sort方法的第四种重载：List.Sort (Int32, Int32, 泛型 IComparer)  。前两个参数分别代表排序的其实位置和排序长度，最后一个参数仍然是泛型IComparer接口类型。上面我们已经定义了StudentComparer类，实现了IComparer接口，这里就可以直接使用了，下面我们只对前三个学生按照年龄由小到大进行排序。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GenericCompare
{
class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>();
Console.WriteLine("未进行排序之前：");
foreach (Student st in students)
{
Console.WriteLine(st.No+","+st.Name+","+st.Age+";");
}
Console.WriteLine("List.Sort (Int32, Int32, 泛型 IComparer) 排序之后：");
students.Sort(0, 3, new StudentCompare());
foreach (Student st in students)
{
Console.WriteLine(st.No + "," + st.Name + "," + st.Age + ";");
}
}
}
}

运行效果：

五、总结：
对于List的排序，.Net中给我们提供了很多选择，我们可以根据情况灵活使用。关于其他泛型集合的排序（例如Dictionary）有时间的话我后面也会逐一同大家分享，今天暂且到这里吧！
展开全文
• ## Python3 list排序函数详解

万次阅读 多人点赞 2018-05-28 18:55:03
Python3 list 排序函数详解 一、列表的sort排序函数 函数原型： list.sort(key=None,reverse=False) 函数功能： 对原列表进行排序，完成排序后，原列表变为有序列表。默认情况（不传入任何参数时）按字典顺序...
• ## flutter dart list排序

千次阅读 2020-01-06 12:52:07
• ## List集合的各种排序

万次阅读 多人点赞 2019-02-15 17:56:39
在Java编程中，经常要对List集合进行排序，因此对List排序的各种情况进行总结，希望对各位读者有所帮助。 1.单属性变量List排序 1.1按照变量属性升序，降序排序 /** * 单属性变量list 自身属性升序, 降序排序 ...
• ## Unity的List排序

千次阅读 2019-03-21 11:32:56
默认List排序是升序排序，如果要降序排序，也很简单，只需要在前面加一个负号即可。 List<int> m_temp = new List<int>(){6,1,3,5,4}; // 升序 m_temp.Sort((x, y) => x.CompareTo(y)); // ...
• ## list排序的问题

千次阅读 2018-09-03 10:02:06
list如何按照自定义排序 方法： 一：list有序列表 输出按照放入先后排序 二：使用Collections.sort()排序 三：创建对象 四： 发现，代码直接报错了： Bound mismatch: The generic method sort...
• 开发中有时需要给List排序，大家都知道List本身是排序的，但它内部排序是按照存入顺序排序的，故而有时候这并不是我们所需要的。 为此，我们需要按照我们的意愿把List里面的object排序。   例子：   实现List...
• ## Java之List排序出错

千次阅读 2014-03-17 22:53:17
Java之List排序出错 Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments (List).  The inferred type Student is not a valid substitute for the ...
• ## python list排序

万次阅读 2011-10-18 09:49:56
很多时候，我们需要对List进行排序，Python提供了两个方法 对给定的List L进行排序， 方法1.用List的成员函数sort进行排序 方法2.用built-in函数sorted进行排序（从2.4开始） 这两种方法使用起来差不多，以第一...
• ## C# List排序

千次阅读 2019-01-30 11:35:04
lambada linq 首先引入：System.Data.Linq包， 声明：using System.Data.Linq;using System.Data.Linq.Mapping;...List orederedList= list.OrderBy(m =&amp;amp;gt; m.LastModificationTime...
• ## JDK1.8 list排序

万次阅读 2018-08-14 18:08:48
• 本文章，讲解Collections.sort给List排序的一种情况： List里的内容是整数 环境 eclipse+JDK1.6 情景： List里的内容是整数 12 需求： /**  * @date 2017-07-12  * @author LTF  * ...
• Java集合的工具类Collections中提供了两种排序的方法,分别是:Collections.sort(List list)Collections.sort(List list,Comparator c)第一种称为自然排序,参与排序的对象需实现comparable接口,重写其compareTo()方法,...
• ## Java kotlin List排序

千次阅读 2018-08-23 18:16:20
//List重新排序 list.sortBy { it.id} 在sortBy里面添加排序多种方法。我这里是以list里面的自定义类的id排序
• ## JDK 8 之 List排序

千次阅读 2019-11-04 01:36:47
1、自然序排序一个listlist.stream().sorted().collect(Collectors.toList()); 2、自然序逆序元素，使用Comparator 提供的reverseOrder() 方法： list.stream().sorted(Comparator.reverseOrder())....
• ## list排序的几种方法

万次阅读 2019-06-11 10:52:05
• ## 给java 中的List排序

千次阅读 2007-12-20 14:15:00
//java list 排序//关键词： java list 排序 //主要用到: Collections.sort方法:package com.tom.compare;import java.util.ArrayList;import java.util.Collections;impor
• List 排序(首先年龄排序，如果年龄相同，则按名字排序)
• 升序降序比较，默认List排序是升序排序 如果要降序排序，也很简单，只需要在前面加一个负号 List<int> tmp = new List<int>(){5,1,22,11,4}; // 升序 tmp.Sort((x, y) => x.CompareTo(y)); // 降...
• ## python list排序问题

千次阅读 2016-09-26 10:20:45
List进行排序，Python提供了两个方法 ---sort---- 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False)  方法2.用序列类型函数sorted(list)进行排序 >>> list = [2,5,1] ...
•  list.sort(key=None,reverse=False) 函数功能： 对原列表进行排序，完成排序后，原列表变为有序列表。默认情况（不传入任何参数时）按字典顺序排序。 函数参数： (1) key: 主要是用来进行比较的元素，只有一...
• ## python list对象排序

千次阅读 2018-10-13 22:17:56
python list对象排序主要使用用sort函数。 list.sort(key=None,reverse=False) 由于list.sort()函数在排序时，使用的是小于号对比，所以自定义的对象类型需要override lt(小于)函数才能实现排序。 ...
• ## flutter - sort List排序

千次阅读 2019-10-18 16:28:07
dart中,对List结构数据进行排序 注意 sort方法 会直接改变原List数组结构 List<Map> myList = [ { 'name' : 'ifredom',age:23}, { 'name' : 'JackMa',age:61}, { 'name' : 'zhazhahui',age:48}, ]; ...
• ## Java 8 中的List排序

万次阅读 2019-06-13 16:50:36
按字母顺序排序字符串列表 List<String> cities = Arrays.asList( "Milan", "london", "San Francisco", "Tokyo", "New Delhi" ); System.out.println(cities); //[Milan, london, S...
• 假如有一个QStringList如下： QStringList keys = QStringList() << "1" << "9" <...这样既可实现排序： qSort(keys.begin(), keys.end(), [](const QString& s1, const QStr...

...