[英]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.