一个算法优化问题,在线等,下午2点结贴,拜托大家了

stevenzxl 2012-05-24 11:03:29
我有这么个需求:
从数据库里面查询出来一个List<Map>,如果正常的话里面应该有9个元素,但是有可能会缺少其中的某几个元素,
这时候我就想把它对应的属性给一个默认值,以确保list里面正好9个元素。
里面存的数据格式是这样的1A,2B,3C,4D,5E,6F,7G,8H,9I(no,word)
以下是我想的办法,但我感觉效率有些低,不知道其他兄弟们有没有什么好办法!

public static final String[] NO_ARRAY = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
// 循环放到list1_9里面
if(list.size() < 9) {
for (Map map : list) {
String no = map .get("no").toString();
for (int i = 0; i < list1_9.size(); i++) {
if (StringUtils.equals(no, list1_9.get(i)))) {
list1_9.remove(i);
break;
}
}
}
}
for (int i = 0; i < list1_9.size(); i++) {
Map map = new HashMap();
map.put(list1_9.get(i).toString(),"default");
list.add(map);
}

有点像伪代码,但是大致是这个意思。
...全文
113 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenzxl 2012-05-24
  • 打赏
  • 举报
回复

public static final String[] NO_ARRAY = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
List<Map> rankingList = getDateFromDB;
if (rankingList.size() != 9) {
List<String> noList = new ArrayList<String>();
for (int i = 0; i < NO_ARRAY.length; i++) {
String no = NO_ARRAY[i];
noList.add(no);
}
for (Map rankMap : rankingList) {
String characterNo = rankMap.get("no").toString();
for (int i = 0; i < noList.size(); i++) {
if (StringUtils.equals(characterNo, noList.get(i))) {
noList.remove(i);
break;
}
}
}
for (int j = 0; j < noList.size();j++) {
String no = noList.get(j);
Map characterMap = new HashMap();
characterMap.put("no", no);
characterMap.put("word", "A");
rankingList.add(characterMap);
}
}
stevenzxl 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

没看明白,像你这样的还需要List<Map>么,List<String>不就完了。
你的1A,2B,3C,4D,5E,6F,7G,8H,9I是map里的数据,还是List里的数据。
看的头晕。。。
[/Quote]
哈哈,我没说明白,从数据库里面查出来就是list<map>类型的
中心意思就是一个桌子坐10个人,每个座位都有一个座位号就是前面的数字,然后一个座位号对应一个人就是后面的字母,最后这个桌子可能没有10个人,我就想查出那个座位上没人,然后从外面找个人坐在对应的位置上。
huage 2012-05-24
  • 打赏
  • 举报
回复

public List<Map<String, String>> getList(List<Map<String, String>> list){
final String[] NO_ARRAY = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
if(list!=null && list.size()>0){
for (int i = 0; i < NO_ARRAY.length; i++) {
boolean b = true ;
for (Map<String, String> map : list) {
for (String key : map.keySet()) {
if(map.get(key).equals(NO_ARRAY[i])){
b = false ;
}
}
}
if(b){
Map<String, String> map = new HashMap<String, String>() ;
map.put(NO_ARRAY[i], NO_ARRAY[i]) ;
list.add(map) ;
}
}
}else{
for (int i = 0; i < NO_ARRAY.length; i++) {
if(list==null)
list = new ArrayList<Map<String,String>>() ;
Map<String, String> map = new HashMap<String, String>() ;
map.put(NO_ARRAY[i], NO_ARRAY[i]) ;
list.add(map) ;
}
}
return list;

}

不知道你为什么要这么做,你都知道是什么数据了就直接装进去就是了撒 ,何必这么麻烦还要做比对,这叫脱了裤子打屁股,完全没必要去考虑效率了撒
菖蒲老先生 2012-05-24
  • 打赏
  • 举报
回复
没看明白,像你这样的还需要List<Map>么,List<String>不就完了。
你的1A,2B,3C,4D,5E,6F,7G,8H,9I是map里的数据,还是List里的数据。
看的头晕。。。
sffx123 2012-05-24
  • 打赏
  • 举报
回复

if(list.size()!=9){
for (int i = 0; i < list1_9.size(); i++) {
for(循环查询得到的list){
if(!得到的map看是否contain list1_9.get(i)的值){
没有直接加进来
}
}
}
}
没太看懂楼主啥意思随便写个,楼主根据自己的要求看看有用没。
stevenzxl 2012-05-24
  • 打赏
  • 举报
回复
上面写的有点复杂,不知道大家明白了吗?中心议题就是找到缺少的那个人,然后拿别人补上。就是这个意思

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧