比较好的办法是linq拉类似sql的语法来查询集合但是这个linq要你自己写,要求有的高。
还有个方法是,放入内存数据库,使用sql查询,easy。。推荐这个

解决方案 »

  1.   

    给一个比较笨的方案,但性能绝对没问题。
    假设原Map对象为originalMap,现在新建一个与originalMap完全相反的Map,假设叫newMap,newMap的key为originalMap的value,newMap的value为Set<Integer>,即originalMap的key的集合。
    搜索时采用二分算法,由于newMap的key是整数,默认是从小到大排好的,现将newMap的key分成左右树,递归对比,符合条件后返回所有左边的集合就是结果。
      

  2.   

    有什么直接点的方法吗.....就是用存JAVA...
      

  3.   

    这个分组有要求吗,不然不是会存在多种分组的结果,不是吗?
    比如:
    id       money
    0         22222
    1         33333
    2         44444
    3         55555
    4        66666
    输入 88888,分组结果是?
      

  4.   

    比如:
    id       money
    5         11111
    0         22222
    1         33333
    2         44444
    3         55555
    4        66666输入  55555分为第一组  
    0         22222
    1         33333
    第二组
    3         55555
    第三组
    5         11111
    2         44444
    第四组
    5         11111
    1         33333
    像这样的...
    只要每一组的合小于或等于指定的值就可以.也可以说每一条记录本身就是一个组合..只是可以忽略掉
      

  5.   

    想了想发现我连怎么取其中任意个数相加求和都不会。
    lz你用自己那个加个多线程有用不。。
    前面几楼的看了看不懂
    sql也写不来。。
    智商好捉急啊
      

  6.   

    想到一个思路,没考虑效率。
    首先这个数据集按value排序
    5         11111
    0         22222
    1         33333
    2         44444
    3         55555
    4        66666
    现在输入55555
    先循环一次,找到原集合中第一个大于输入55555的值的位置:5(位置下标从0开始)
    这个位置之前的子集合是我们要计算的数据,之后的数据不用考虑。
    然后根据这个下标5得知一共有5条数据,然后就是一个递归排列组合问题了,把所有可能的组合都计算一个和,如果和小于输入55555,则该组合是结果集的一个项。