生成唯一的序列号java

时间:2017-09-27 09:32:46

标签: java list collections

我根据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);
        }

但这并没有给我想要的结果。怎么做?

3 个答案:

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

Your code-link, edited with changes.