什么是修改此代码的更好方法[重构]

时间:2012-02-21 08:43:52

标签: java refactoring

有没有更好的方法来展示此代码?

while (vIter.hasNext()) {
    Long actId = (Long) vIter.next();
    if (actId == -1) 
        vRetActIds.put(actId,"N");
    else
        vRetActIds.put(actId,"N");
}

在这里,我觉得if else可以变得多余。在迭代器列表中有一个值-1,如果存在,则应"N"

4 个答案:

答案 0 :(得分:5)

你的两条指令在if的两边都是一样的!我怀疑你贴错了什么。我们假设它们不同("Y""N"):)您可以使用ternary operator简单地编写它:

while (vIter.hasNext()) {
    Long actId =(Long)vIter.next();
    vRetActIds.put(actId, actId == -1 ? "N" : "Y");
}

编辑:根据您的评论,您似乎确实希望每次都将值设置为“N”?在这种情况下,您根本不需要if ...

while (vIter.hasNext()) {
    vRetActIds.put((Long)vIter.next(), "N");
}

答案 1 :(得分:2)

如果我们可以假设你在新的java中使用某种类型的Collection,那么这样的东西会更简洁,并且不会因为空指针而崩溃?

Long MINUS_ONE = Long.valueOf(-1);
while (Long actId : vIter) 
{
    vRetActIds.put(actId, MINUS_ONE.equals(actiId) ? "N" : "Y");
}

答案 2 :(得分:1)

三元条件陈述没问题。

vRetActIds.put(actId, actiId == -1 ? "N" : "Y");

答案 3 :(得分:1)

让我们假设您从List这样的地方获取迭代器:

List<Long> list;
Iterator<Long> vIter = list.iterator();

如果是这种情况(它或类似的东西,几乎必须如此),那么你可以完全放弃迭代器并使你的代码更容易阅读,因此:

for (Long actId: list)
    vRetActIds.put(actId, "N");