例1:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; public class Test {
public static void main(String[] args) {
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("a", 1);
m.put("b", 1);
m.put("c", 2);
m.put("d", 3);
System.out.println(getFristEntryOfSortedMap(m, true));
System.out.println(getFristEntryOfSortedMap(m, false));
} /**
* 通过map 的 value 排序,并返回排序后的第一个条目
*
* @param m
* 待排序集合
* @param desc
* true:降序排序,false:升序排序
* @return 返回排序后的第一个条目
*/
public static Entry<String, Integer> getFristEntryOfSortedMap(Map<String, Integer> m, boolean desc) { if (m == null || m.isEmpty()) {
throw new IllegalArgumentException("map is null or empty");
}
Set<Entry<String, Integer>> entrySet = m.entrySet();
Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
if (iterator.next().getValue() == null) {
throw new IllegalArgumentException("map contains null value");
}
}
List<Entry<String, Integer>> entryList = new ArrayList<Entry<String, Integer>>(entrySet);
if (desc) {
Collections.sort(entryList, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2) {
return e2.getValue() - e1.getValue();
}
});
} else {
Collections.sort(entryList, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2) {
return e1.getValue() - e2.getValue();
}
});
}
return entryList.get(0);
} }
d=3
a=1

例2:

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<Person> list = new ArrayList<Person>();
list.add(new Person(3, "d"));
list.add(new Person(1, "a"));
list.add(new Person(1, "b"));
list.add(new Person(2, "c"));
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p2.getAge() - p1.getAge();
}
}); System.out.println(list);
} } class Person {
private int age;
private String name; Person(int age, String name) {
this.age = age;
this.name = 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 "Person [age=" + age + ", name=" + name + "]";
} }
[Person [age=3, name=d], Person [age=2, name=c], Person [age=1, name=a], Person [age=1, name=b]]

注: 值等时保持原有顺序

非自然序,降序

自然序(1,2,3,...),升序

最新文章

  1. 几种加解密方法:AES、DES、SHA数据加密
  2. [IIS]IIS扫盲(八)
  3. C语言 二级指针内存模型③
  4. 使用ContentProvider管理多媒体-----向多媒体数据中添加数据
  5. C#实现动态网站伪静态,使seo更友好
  6. OC语法1——OC概述
  7. MFC中的HOOK编程
  8. Eclipese Mars安装SVN的全步骤
  9. webscoket实战之利用httpsession定向推送
  10. MongoDB数据库的安装、配置和使用
  11. 视频当道的时代,这些珍藏的优质 Python 播客值得推荐
  12. SignalR学习笔记(二)高并发应用
  13. Docker实现容器具有固定IP
  14. (转)Docker容器的重启策略及docker run的--restart选项详解
  15. ubuntu彻底卸载opencv
  16. [JS]给String对象添加方法,使传入的字符串字符之间以空格分开输出
  17. 录音 voice record
  18. 【转】Redis 总结精讲 看一篇成高手系统-4
  19. &#39;AndroidManifest.xml&#39; must have a minimum of 2 segments.
  20. 怎么在苹果Mac虚拟机上安装Win7

热门文章

  1. 【LeetCode】075. Sort Colors
  2. mapreduce-实现多表关联
  3. 为什么很多公司招聘前端开发要求有 Linux / Unix 下的开发经验?
  4. CentOS7自动补齐
  5. 洛谷【P1004】方格取数
  6. Visualforce入门第一篇_2017.3.1
  7. 除了IE浏览器能识别之外,其他浏览器都不能识别的html写法
  8. HDU5692(dfs序+线段树)
  9. maven中maven dependencies中依赖出现了项目
  10. Celery-4.1 用户指南: Signals (信号)