我根据Map生成列表,
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
完整代码在这里:https://repl.it/L3cv/0
代码结果:
list1: [account_number, account_number, account_number, account_number, Amount, Amount, Amount, Amount]
list2: [1, 2, 3, 4, 100, 400, 500, 700]
期望的结果:(基于list2生成唯一序列/ id)
list3: [1, 2, 3, 4, 1, 2, 3, 4]
在代码中,我尝试添加&#39; sequence_number&#39;,但它只是给出增量值[1,2,3,4,5,6,7,8]
sequence_number = 0;
for (final Integer val : value) {
sequence_number++;
list3.add(key);
list4.add(val);
}
但这并没有给我想要的结果。怎么做?
答案 0 :(得分:1)
根据您对此问题的回答,有两种可能的解决方案:
&#34;第一个列表是否始终包含项目对?意思是,它总是有偶数条目,所以如果有12个条目,你期望1,2,3,4,5,6,1,2,3,4,5,6?&#34;
如果是,您的解决方案是这样的:
int halflist = list1.size() / 2;
int sequencenumber = 0;
for (...) {
sequencenumber++;
// add your stuff
if (sequencenumber == halflist) sequencenumber = 0;
}
这会提高1,2,3,4,1,2,3,4的值。 它也可以用模数和更花哨的代码来完成,但这里的简单增量应该让它变得可以理解。
答案 1 :(得分:1)
我不是100%确定你要解决的问题。这就是我认为你试图实现的目标。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
List<Integer> list2 = new ArrayList<Integer>();
list2.add(100);
list2.add(400);
list2.add(500);
list2.add(700);
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
map.put ("account_number", list1);
map.put ("Amount", list2);
System.out.println(map);
List<String> list3 = new ArrayList<String>();
List<Integer> list4 = new ArrayList<Integer>();
String lastkey = null;
int sequence = 0;
for (final Entry<String, List<Integer>> entry : map.entrySet()) {
final String key = entry.getKey();
final List<Integer> value = entry.getValue();
for (final Integer val : value) {
list3.add(key);
if(lastkey == null||lastkey!=key){
sequence = 1;
lastkey = key;
}
list4.add(sequence++);
}
}
System.out.println(list3);
System.out.println(list4);
}
}
答案 2 :(得分:0)
期望的结果:(基于list2生成唯一序列/ id)
您的意思是list1
吗?因为您提供的示例 - [1, 2, 3, 4, 1, 2, 3, 4]
是list1
。
然后,如果您要重新启动大小为list1
的序列ID计数器,您可以使用%
- 运算符:
for (final Entry<String, List<Integer>> entry : map.entrySet()) {
final String key = entry.getKey();
final List<Integer> value = entry.getValue();
for (int i = 0; i < value.size(); i++) { //<<< We need an index.
list3.add(key);
list4.add(list1.get(i % list1.size())); //<<< Change this!
}
}