簡體   English   中英

將long列表轉換為String set

[英]Convert List of long to String set

假設由於某種原因,我必須將List<Long>轉換為Set<String> 為了不丟失列表中的任何項目,我必須從這些項目中創建一個唯一的String 目前,我正在這樣做:

public class StringUtils {
    private static final String FORMAT = "<%d>:%s";
    private static long counter = 0;

    public static synchronized String valueOf(long value) {
        return String.format(FORMAT, counter++, String.valueOf(value));
    }

    public static long getLong(String input) {
        int start = input.indexOf(":") + 1;
        int end = input.length();

        return Long.parseLong(input.substring(start, end));
    }
}

for(long item : list) {
   set.add(StringUtils.valueOf(item));
}

我認為這不是一個很好的解決方案,但至少可以奏效。 您能想到更好/更快的方法嗎? 順便說一句。 我僅限於Java 7。

要訪問List索引,請不要對進行增強for而對進行經典for

private static final String FORMAT = "<%d>:%s";

// ...

for(int i=0; i< list.size(); i++) {
   long item = list.get(i);
   set.add(String.format(FORMAT, i, String.valueOf(item)));
}

請注意,不丟失Set​​中重復元素的方式是可行的:包含兩個不同信息的String沒有意義。
您可以使用不覆蓋equals()/hashCode()的自定義類,這樣就不會丟失任何元素:

Set<MyValue> set = ...;

for(long item : list) {
   set.add(new MyValue(item)));
}

其中MyValue定義為:

public class MyValue{

  private long value; 

  public MyValue(long value){
    this.value = value;
  }

  public long getValue(){ 
     return value;
  }
}

我可以想到ListIterator為您提供索引。

    for (ListIterator<Long> iter = list.listIterator(); iter.hasNext(); ) {
        int  i = iter.nextIndex();
        long l = iter.next();
        set.add(String.format(FORMAT, i, String.valueOf(l)));
    }

在線嘗試!

暫無
暫無

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

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