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;
}
}
}
}