我有一个TreeSet,它将充满整数。总而言之,我试图在列表中存储的最后一个(最大)值之后循环。我现在要做的是获得起始变量:
Object lastObj = primes.last();
Integer last = new Integer(lastObj.toString());
int start = 1 + last.intValue(); // the added 1 is just for program logic
我确信必须有更好的方法将对象(我知道永远是一个int)转换为int'start'。有人知道更好的方法吗?
答案 0 :(得分:8)
在J2SE 5或更高版本中,它会自动发生,具有“自动装箱”功能。
int start = 1 + last;
http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html
另外,如果你知道它们都是Integer对象,请使用参数化类型:
List<Integer> obj = new ArrayList<Integer>()...
然后将其与自动装箱功能结合使用:
int start = 1 + obj.last();
答案 1 :(得分:8)
您使用的是Java 1.6版吗?在这种情况下,您可以利用autoboxing和泛型来清理代码。
首先,可以将TreeSet声明为仅包含Integer对象
TreeSet<Integer> primes;
现在从集合中获取对象
Integer last = primes.last();
并使用自动装箱功能
int start = 1 + last;
答案 2 :(得分:4)
如果你知道它们在放入时是'int',那么它们在Collection中被转换为Integer(集合不能包含基元,只有对象),因此,你可以简单地Integer last = (Integer)lastObj;
。
理想情况下,你会使用TreeSet<Integer>
,然后它会首先为你提供整数。
答案 3 :(得分:4)
如果您知道primes
仅包含整数,则应将primes
改为TreeSet<Integer>
。
然后会变成:
int start = 1 + primes.last().intValue();
如果你不能使用泛型,请使用:
int start = 1 + ((Integer)prime.last()).intValue();
投射到一个字符串只是愚蠢。
顺便说一句,我不建议使用自动装箱。它背后有各种各样的东西。明确使用Integer
对我来说似乎更清晰。但这只是我个人的偏好,如果你愿意,你可以使用自动装箱。
答案 4 :(得分:3)
发布Java 1.4后,您可以使用autoboxing。
所以它变成了,
int start = 1 + (Integer) primes.last(); // the added 1 is just for program logic
如果您在TreeSet(TreeSet<Integer>
)中使用了泛型,则可以删除初始强制转换为Integer。
答案 5 :(得分:2)
为什么你不能只是转换它,而是转换为字符串,然后解析该字符串并创建新的引用?
Object lastObj = primes.last();
int start = 1 + ( ( Integer )lastObj ).intValue();