2012-02-21 12 views
2

このコードを表示するには、より良い方法がありますか?ここでこのコードを修正するには何が良いでしょうか[リファクタリング]

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

私はif elseを冗長化することができます感じています。イテレータリストには、-1という値があり、存在する場合は"N"とする必要があります。

+0

しばらく(vIter.hasNext())vRetActIds.put((ロング)vIter.next()、 "N"); –

+0

私が見るコードから、ifとelseの両方が同じです。どんなタイプミス? – Jayy

+0

あなたのコレクション 'Collection 'を宣言し、 'Iterator 'を取得し、キャストを避けることができます。 – Marcelo

答えて

5

あなたの2つの手順はif!の両側で同じです!私は間違ったことを貼ったと思う。のは、彼らが異なっている("Y""N")を想定してみましょう:)あなたは、単に使用して、それを書くことができternary operator

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

EDIT:あなたのコメントからは、それはあなたが実際にN」に値を設定したいように思えます' 毎回?その場合、あなたは

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

三項条件文は大丈夫だろう...全然if必要はありません。私たちは、あなたが新しいJavaでいくつかの並べ替えのコレクションを使用していると仮定できる場合

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

は、このようなものは、より簡潔になり、ヌルポインタが原因でクラッシュしないのだろうか?そして、(ほとんどの場合する必要があり、それを、またはそれのようなもの)その場合は

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

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

のは、あなたがどこかに一覧などから、あなたのイテレータを取得していると仮定しましょうあなたは、このように、イテレータを完全に断念して読み取ることがはるかに簡単にあなたのコードを行うことができます。

for (Long actId: list) 
    vRetActIds.put(actId, "N"); 
関連する問題