簡體   English   中英

Java將兩個不同大小的列表合並到HashMap

[英]Java Merge two Lists of different size to a HashMap

我需要一些提示:我可以說一個清單或年份序列

int startYear = 2010;
int endYear = 2050;

我有一個用字母和數字作為年份代碼的枚舉。

我需要此代碼來生成條形碼,其中我需要將時間戳編碼為3位數字/字母,因此我需要將年月日映射到代碼位置。

我需要做的是將年份序列映射到代碼列表,並將其映射到鍵(年份數字)和值(年份代碼)的HashMap中,

但是很明顯,代碼列表的長度不如年份序列,因此我需要檢查何時到達最后一個索引,如果是,我需要重新遍歷代碼列表,直到到達年份序列的末尾。

我需要實現的是:

year    code
2012     C
2013     D
.
.
2030     Y
2031     1
.
.
2039     9
2040     A

等等...

不幸的是,我無法找到一種方法來做到這一點,因為我對Java很陌生,所以如果有人可以給我一些建議,我將不勝感激。

只需使用%運算符即可計算代碼索引

List years = ...
List codes = ...
for (int i = 0, yearsSize = years.size(), codesSize = codes.size(); i < yearsSize; i++) {
     map.put(years.get(i), codes.get(i % codesSize));
}

請參閱余數運算符(%)

這樣的事情怎么樣?:
假設:

public enum Code {
    A, B, C, ... Z, 1, ... 9;
}
List<Integer> years;
HashMap<Integer,Code> map;

只需為代碼添加索引,如果索引太大,它將初始化:

int i = 0;
for(Integer year : years) {
    map.push(year, Code.values()[i];
    i++;
    if(i >= Code.values().length) {
        i = 0;
    }
}

在對年份進行編碼之前,對年份進行模數化,以便%year%循環:

int yearToEncode = 2012 + ((year - 2012) % MyEnum.values().length);

假設2012是“零年”。

然后,您可以使用:

MyEnum encodedYear = MyEnum.values()[yearToEncode - 2012];

但是,如果零年是任意的,則您的代碼將簡單得多:

MyEnum[] codes = MyEnum.values();
MyEnum encodedYear = codes[year % codes.length];

試試這個,您甚至可以更改開始年和結束年

int yStart = 2010;
int yEnd = 2050;
String s  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 
int pos = 0;
for(int i = yStart; i < yEnd; i++){
    pos = (i - yStart)%s.length();
    map.put(i, s.substring(pos, pos+1));// put in map
    System.out.println(i + "  " + s.substring(pos, pos+1));

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM