2017-09-27 195 views
-2

我基于地图列表,生成唯一序列号的java

 Map<String, List<Integer>> map = new HashMap<String, List<Integer>>(); 

完整的代码是在这里:

 list1: [account_number, account_number, account_number, account_number, Amount, Amount, Amount, Amount] 
     list2: [1, 2, 3, 4, 100, 400, 500, 700] 

期望的结果:https://repl.it/L3cv/0

代码的结果(生成唯一序列号/ id基于列表2)

 list3: [1, 2, 3, 4, 1, 2, 3, 4] 

在代码中,我试图添加“sequence_number”,但它只是提供了增量值[1,2,3,4,5]

 sequence_number = 0; 
     for (final Integer val : value) { 
      sequence_number++; 
      list3.add(key); 
      list4.add(val); 
     } 

,但这并没有给我期望的结果。怎么做?

回答

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

有两种可能的解决方案,根据您的这个问题的答案:?

“做第一个列表总是包含对项目的手段,它始终为偶数的条目数,因此,如果有12项,你期望1,2,3,4,5,6,1,2,3,4,5,6?“

如果是的话,你的解决方案是这样的:

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。 它可以用模和更多的花式代码来完成,但是这里的简单增量应该让它易于理解。

  • 如果否,请提供更多详细信息,您想实现什么。
+0

感谢您的解决方案,这也很有帮助,但它添加0像[2,3,4,0,2,3,4,0] – Maddy

+0

不,我不这么认为。它从零开始,但作为for ...循环的第一行递增。所以第一个值是1. for循环的最后一行是if ...语句,该语句重置为零(并且再次递增,作为下一次迭代的第一行)。 你是否有上述顺序中的行? – Grisgram

0

期望的结果:(生成基于列表2独特的序列/ ID)

你的意思是list1?因为您给出的示例 - [1, 2, 3, 4, 1, 2, 3, 4]的版本为list1

然后,如果你想超过list1大小重新启动序列号柜台,你可以使用% - 运算符:

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

Your code-link, edited with changes.