java提取符合条件的数据

java从一堆String\tInteger中取出Integer最大的两个值:
比如:a 45
a 20
b 15
d 10
a 45
要求取出:
a 45
b 15

我写的有些复杂,不过我都写注释了,你可以简略一下

 class Result{
    String str;
    int maxNum;

    public void setStr(String str) {
        this.str = str;
    }


    public void setMaxNum(int maxNum) {
        this.maxNum = maxNum;
    }
}
/**
 * 定义一个map<String,List>,
 * String就是根据分类的字符串,List就是这个字符串跟着的int组成的list
 * 然后把每个list排序,取出最大的值就行
 */
public class FindMax {
    /**
     * 这是初始化map,就是给map里塞值
     * @param str 输入的字符串
     * @param num 紧跟着的int数值
     */
    public Map getMap(String str,int num){
        //先输入数据,对String一样的int,将其组成一个list
        Map<String,List> map = new HashMap<String,List>();
        List<Integer> list = new ArrayList<Integer>();

        if(map.containsKey(str)){
            list = map.get(str);

        }else {
            list = new ArrayList<Integer>();
        }
        list.add(num);
        map.put(str,list);
        return map;
    }
    /**
     * 然后就是把结果返回
     */
    public List<Result> getTheMax(Map map){
        //这个输入数据可以再抽象出一个方法来,我这边随意写的
        String str = "Test";
        int num = 1;


        map = getMap(str,num);
        Iterator entries = map.entrySet().iterator();
        List<Integer> list = new ArrayList<Integer>();
        List<Result> resultList = new ArrayList<Result>();
        String resultStr = null;
        int resultNum = 0;
        while (entries.hasNext()){
            Map.Entry entry = (Map.Entry) entries.next();
            resultStr =(String )entry.getKey();
            list = (List)entry.getValue();
            Collections.sort(list);
            resultNum = list.get(list.size() - 1);
            //这时候已经得到一对值了,然后把它们组装成Result,放到resultList里去
            Result result = new Result();
            result.setStr(resultStr);
            result.setMaxNum(resultNum);
            resultList.add(result);
        }
        return resultList;
    }
}


我居然没看懂你想提取啥。。。
可以再描述清楚点吗?

String[] arr1=new String[]{123 45,123 20,345 37,456 10,789 80};
int[] arr2=new int[5];
for(int i=0;i<arr1.length;i++){
arr2[i]=Integer.parseInt(arr1[i].substring(arr1[i].lastIndexOf(" ") + 1));

}
for(int i=0;i<arr2.length;i++){
//循环取最大值会吧,去索引,然后在去取arr1的值
}

利用treemap,代码如下:

package com.syz.controller;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

public class MapSortValue {
public static void main(String[] args) {
// 默认情况,TreeMap按key升序排序
Map map = new TreeMap();
map.put("123", 45);
map.put("123 ", 20);
map.put("345", 37 );
map.put("456", 10);
map.put("789", 80);
// 升序比较器
Comparator> valueComparator = new Comparator>() {
@Override
public int compare(Entry o1,
Entry o2) {
// TODO Auto-generated method stub
return o2.getValue()-o1.getValue();
}
};
// map转换成list进行排序
List> list = new ArrayList>(map.entrySet());
// 排序
Collections.sort(list,valueComparator);
// 默认情况下,TreeMap对key进行升序排序
System.out.println("------------map按照value降序排序--------------------");
for (Map.Entry entry : list) {
System.out.println(entry.getKey() + ":" + entry.getValue());
//取出前面2个元素为最大的
}

int i=0;
for(Map.Entry enMap :list){
System.out.println("最大的元素:"+enMap.getKey() + ":" + enMap.getValue());
i++;
if(i==2){
break;
}
}
}
}