2016-11-16 5 views
1

私は整数値のアドレスをこの関数に渡します。この整数値は、Arraylist "instrHolder"に格納されているオブジェクトの1つに含まれています。次に、どのオブジェクトにこの値が含まれているかを調べて、 "Instruction"タイプのオブジェクト全体を返します。ここに私がしようとしているもの -イテレータを使用してarraylistのオブジェクトストアのフィールドを比較する

private static Instruction getInstruction(int address) { 
    Iterator<Instruction> iterator = instrHolder.iterator(); 
    while(iterator.hasNext()){ 
     if(/*condition need to know*/) 
     return /*need to know*/; 
    } 
} 

私はどのようにif条件を書いて、返信文を書くべきですか?私を助けてください?

+0

条件が真でない場合はどうしたらよいでしょうか?例外を投げる?デフォルト値を返しますか? – Spotted

答えて

3

iterator.next()は、Listの現在のインスタンスを提供します。あなたは、そのインスタンス上であなたの状態をチェックし、条件が満たされた場合にそれを返す必要があります:

private static Instruction getInstruction(int address) { 
    Iterator<Instruction> iterator = instrHolder.iterator(); 
    while (iterator.hasNext()) { 
     Instruction current = iterator.next(); 
     if (current.getSomeProperty().equals(someValue)) 
      return current; 
    } 
    return null; 
} 

斑点で示唆したように、あなたのリストのどの要素が条件に一致しない場合に返すかを決める必要があります。この場合、nullを返すことにしました。

+0

あなたの経験から、コレクション内の要素が条件に一致しない場合は、どのように処理しますか? – Spotted

+0

@ Spottedこれはユースケースによって異なります。条件に一致するコレクションの要素がないという有効なシナリオである場合は、nullを返すことができます。それ以外の場合は、例外をスローすることができます。ご意見ありがとうございます。 – Eran

2

あなたはiterator.next()を使用することができますし、integeraddressを比較したかったので、あなたは、コードの下に参照することができます。

while (iterator.hasNext()) { 
      Instruction instruction = iterator.next();//Get single instruction 
      //Get getAddress() from instruction object 
      if (instruction.getAddressValue() == address) { 
       return instruction; 
      } 
     } 
+0

あなたの経験から、コレクション内の要素が条件に一致しない場合は、どのように処理しますか? – Spotted

1

instrHolderArrayListあるので、Iteratorと気にしないでください。むしろStreamOptionalを使用してください。また、あなたのコードでは、要素がaddressと一致しない場合の動作は指定されていません。下のコードでは例外をスローしますが、デフォルト値(orElse())も返すことができます。

private static Instruction getInstruction(int address) { 
    return instrHolder.stream() 
         .filter(i -> i.getAddress() == address) 
         .findFirst() 
         .orElseThrow(NoSuchElementException::new); 
} 
関連する問題