我有一张地图,如下所示:
Key Value
23 20
32 20 (20+20 =40 , min=23 max=32)
43 18
45 24 (24+18 =42 , since 42 >40 so here min and max will be same that is 43
47 10
56 6 (24 +10 +6 =40) so here min =45 and max = 56
49 2
47 12
如您所见,将有一个名为split的最终常量,其值为40
final int SPLIT = 40; //this will be configurable as it value can be changed.
我必须实现逻辑,例如,如果映射的值达到40,那么从计算开始的映射的第一个键以及恰好达到40的键也将被选择为min和max,如上所述。 。
除此之外,如果总和超过40,则需要格外小心。如果是,我们必须忽略它,并且在最小值和最大值相等的情况下,将先前的值本身作为最小值和最大值。
请建议我如何使用Java和Map
。乡亲们请指教
我正在存储的数据不是来自数据库,而是从对象列表中的休眠条件进行存储
我从Hibernate条件中获取列表,如下所示…
List<Object[]> abcObjectsList= session.createCriteria(dddObject.class)
在我以这种格式获取数据时进行检查
abcObjectsList= ArrayList<E>
elementData =Object[3]
[0] = Long ----------> value 23
[1] = Integer -------> value 20
[0] = Long ----------> value 32
[1] =Integer -------> value 20
[0] =Long ----------> value 43
[1] =Integer -------> value 18
我将其以相同的方式存储在地图中
Map<Long, Integer> result = new HashMap<Long, Integer>();
for (Object[] arr : list) {
result.put((Long) arr[0], (Integer) arr[1]);
}
所以最终地图将包含..
Key Value
23 20
32 20 (20+20 =40 , min=23 max=32)
43 18
您可以创建一个Pair
包含键和值的类,而不是使用Map 。
class Pair {
public int key;
public int value;
public Pair(int key, int value){
this.key = key;
this.value = value;
}
}
然后创建一个配对列表并对其进行迭代。如果总和为0,则初始化最小值和最大值。然后对于每个迭代的对,将其值加到总和上。如果总和小于,请继续循环并更新max键,否则可能出现两种情况:
public static void main(String[] arg) {
List<Integer> indexList = Arrays.asList(23,32,43,45,47,56,49,47); // get this from database
List<Integer> valueList = Arrays.asList(20,20,18,24,10,6,2,12); // get this from database
List<Pair> pairList = new ArrayList<>();
for(int i = 0; i < indexList.size();i++){
pairList.add(new Pair(indexList.get(i), valueList.get(i)));
}
int sum = 0;
int min = -1;
int max = -1;
for(int i = 0; i < pairList.size(); i++){
Pair p = pairList.get(i);
if(sum == 0){
min = p.key;
max = p.key;
}
sum += p.value;
if(sum < LIMIT){
max = p.key;
} else {
if(sum > LIMIT){
i--;
} else {
max = p.key;
}
System.out.println(min+"_"+max);
sum = 0;
}
}
}
哪些打印:
23_32
43_43
45_56
我将向您展示如何通过地图创建一个配对列表(使用a LinkedHashMap
来保留插入顺序)(显然,您需要对Pair
类进行一些修改):
Map<Long, Integer> m = new LinkedHashMap<>();
//fill your map here
List<Pair> l = new ArrayList<>();
for(Map.Entry<Long, Integer> entries : m.entrySet()){
l.add(new Pair(entries.getKey(), entries.getValue()));
}
//Now you have a list of Pair
问题内容: 我有一个包含各种字符串值的列表。我想一看就拆分列表。结果将是一个列表列表(这将是原始列表的子列表),其中仅包含I的一个实例,我可以使用循环执行此操作,但是有没有 更Python的 方法可以实现此目的? 例子= 结果= 这是我尝试过的方法,但实际上并没有达到我想要的效果,因为它将放入应包含的其他列表中: 问题答案: 我会使用发电机: 此打印 该代码接受任何可迭代的代码,并生成一个可迭代的
我以前使用Netlogo,有一些非常好的内置方法,允许我从总人口中筛选和控制所需的代理。(见:http://ccl.northwestern.edu/netlogo/docs/dictionary.html#agentsetgroup).例如,我可以很容易地用简单的代码在模拟中命令不同级别的人员代理,例如: 在Repast中,是否有专门为方便控制代理集而构建的方法列表?
我用AnyLogic创建了一个简单的模型(见截图)。现在我想添加一个条件,选择服务块中的两个资源集中的一个。例如,以下场景应适用:如果队列中有5个以上的部件,工作人员3和工作人员4应执行服务。如果有的话
问题内容: 从美学角度和性能角度来看,基于条件将项目列表拆分为多个列表的最佳方法是什么?相当于: 有没有更优雅的方法可以做到这一点? 更新:这是实际的用例,以更好地解释我正在尝试做的事情: 问题答案: 有没有更优雅的方法可以做到这一点? 该代码完全可读,而且非常清晰! 再次,这很好! 使用集合可能会稍微改善性能,但这是微不足道的差异,而且我发现列表理解要容易阅读得多,并且你不必担心顺序被弄乱了,重
给定任务:“编写名为‘mysplit’的函数,该函数获取一个int数组并调用一个名为‘mysplit’的递归方法。函数mysplit需要检查当前数组是否可以分为以下两组: *每组的总和必须相等。 *每个数字在每个组中只出现一次(此子句旨在防止用户添加/复制数字,以获得两个组之间的相等值=第一个子句)。 *所有可以除以5的数字必须在同一组。 *所有能被3(而不是5)除以的数字必须在第二组中。 我已经
sql如果有重复数据,怎么根据需要去重,比如no相同,优先保留code为b的 五条数据四条code a 一条code b 其中code b的no和code a重复了,最后应该是四条数据,其中三条code a一条code b