java map 排序 取数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java map 排序 取数相关的知识,希望对你有一定的参考价值。
现在map中有数据
key,value
"北京",10
"天津",8
"上海",9
"杭州",10
"广州",7
"深圳",8
"厦门",5
我想打印出分数并列排名前三的城市的值
即
"北京",10
"杭州",10
"上海",9
"天津",8
"深圳",8
这样一个结果
不知道在map中怎么根据值排序取到并列前三的值?
public static void main(String[] args)
List<Map.Entry<String,String>> mappingList = null;
Map<String,String> map = new HashMap<String,String>();
map.put("month", "1");
map.put("bread", "3");
map.put("attack", "2");
map.put("dsk", "2");
//通过ArrayList构造函数把map.entrySet()转换成list
mappingList = new ArrayList<Map.Entry<String,String>>(map.entrySet());
//通过比较器实现比较排序
Collections.sort(mappingList, new Comparator<Map.Entry<String,String>>()
public int compare(Map.Entry<String,String> mapping1,Map.Entry<String,String> mapping2)
return mapping2.getValue().compareTo(mapping1.getValue());
);
for(Map.Entry<String,String> mapping:mappingList)
System.out.println(mapping.getKey()+":"+mapping.getValue());
参考技术B public static void main(String[] args)
Map map=new HashMap();
map.put("北京", 10);
map.put("天津", 8);
map.put("上海", 9);
map.put("杭州", 10);
map.put("广州", 7);
map.put("深圳", 8);
Set set=map.keySet();
Iterator it=set.iterator();
List<Integer> list=new ArrayList();
while(it.hasNext())
String key=(String) it.next();
int value=Integer.parseInt(map.get(key).toString()) ;
list.add(value);
Collections.sort(list);
for (int i = 0; i < list.size(); i++)
if(list.get(i)==list.get(i+1))
list.remove(i);
for (int i =list.size()-1; i >=0; i--)
Set set1=map.keySet();
Iterator it1=set1.iterator();
while(it1.hasNext())
String key=(String) it1.next();
int value=Integer.parseInt(map.get(key).toString()) ;
if(value==list.get(i))
System.out.println("key="+key+";value="+value);
代码很长 不懂在问我吧 没想到太好的方法追问
按照list.size循环 处理remove之后不是会下标越界吗?
追答不会 list.size()是变量 你可以测试下
本回答被提问者采纳 参考技术C public static void main(String[] args)Map<String, Integer> map = new HashMap<String, Integer>();
map.put("北京", 10);
map.put("杭州", 10);
map.put("上海", 9);
map.put("天津", 8);
map.put("深圳", 8);
Collection<Integer> set = map.values();
Object[] a = set.toArray();
Arrays.sort(a);
for (int j = a.length - 3; j < a.length; j++)
Iterator<String> it = map.keySet().iterator();
while (it.hasNext())
String str = it.next();
if (map.get((str)).equals(a[j]))
System.out.println("\"" + str + "\"," + a[j] + "");
break;
追问
= =哥们你这方法是按照答案来写的啊
追答不是啊 变换成数组之后进行排序,然后输出啊!!!
追问哦是我看错了,不好意思啊
abap 取数排序之后怎么取第一行
用索引读取 单行要用索引从 内表中读取 单行,请使 用 READ 语句,用法 如下:
语法
READ TABLE <itab> [INTO <wa>] INDEX <idx>.
用 INTO 选项指定目 标区域 <wa>。 如果表格有 表头行,可 以忽略 INTO 选项。这样 ,表格工作 区域就成了 目标区域。
系统用索引 <idx> 从表格 <itab> 中读取行。 这比用关键 字访问表格 要快(参见 读取有关键字的单行 )。
如果找到有 指定索引的 条目,则将 系统字段 SY-SUBRC 设置为0, 而且 SY-TABIX 包含该行的 索引。否则 ,SY-SUBRC 包含非0值 。
如果 <idx> 小于或等于 0,则会发 生实时错误 。如果 <idx> 超过表格大 小,系统将 SY-SUBRC 中的返回代 码值设置为 4。
DATA: BEGIN OF ITAB OCCURS 10,
COL1 TYPE I,
COL2 TYPE I,
END OF ITAB.
DO 20 TIMES.
ITAB-COL1 = SY-INDEX.
ITAB-COL2 = 2 * SY-INDEX.
APPEND ITAB.
ENDDO.
READ TABLE ITAB INDEX 7.
WRITE: SY-SUBRC, SY-TABIX.
WRITE: / ITAB-COL1, ITAB-COL2.
其输出为:
0 7
7 14
在此创建有 表头行的内 表 ITAB, 并用20行 对其进行填 充。读取并 输出索引为 7的行。 参考技术A READ INT_TAB INTO WA_TAB INDEX 1. 参考技术B 黄石美瞳仓库,阿坝美瞳批发,大同美瞳代发哪家不错
以上是关于java map 排序 取数的主要内容,如果未能解决你的问题,请参考以下文章