java从一堆String\tInteger中取出Integer最大的两个值:
比如:a 45
a 20
b 15
d 10
a 45
要求取出:
a 45
b 15
java提取符合条件的数据
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 007Detective 2017-11-14 14:53关注
我写的有些复杂,不过我都写注释了,你可以简略一下
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; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报