2016-10-30 11 views
-1

私はマップのリストを持っています。マップは2つの値 "キー"と "値"を保持しています。私はそのリストから特定の値を除外しなければなりません。だから私はリストを反復しています。マップに必要なキーがある場合、その値をとり、別のpojoで設定します。Javaストリームとforeach

{ 
teams=[" 
{key=NAME, value="ANKIT"}, 
{key=START_DATE, value=2016-09-01} 
} 
String START_DATE = "START_DATE"; 
STRING NAME = "NAME"; 

私は複数の条件をチェックしています。私はforeachを使ってこれをやっています。これは、Java 8 stream()を使用して行うことができます。

teamList.forEach(
team -> { 
    if (NAME.equals(team.get("key"))) { 
     team.setName(team.get("value")); 
    } else if (START_DATE.equals(team.get("key"))) { 
     team.setEndDate(LocalDate.parse(team.get("value"))); 
    } 
}); 
+0

なぜストリームで行うのですか? – Andrew

+2

私たちがストリームの主題に入る前に...あなたは何をやろうとしていますか? –

+0

私はマップのリストを持っています。マップは2つの値 "キー"と "値"を保持しています。私はそのリストから特定の値を除外しなければなりません。だから私はリストを反復しています。マップに必要なキーがある場合、その値をとり、別のpojoで設定します。 – rksc82

答えて

0

Java 8の新機能を使用して古いJavaコードを置き換えることはできません。誰もがあなたが試みていることはJava 8ストリームの推奨された使用ではないことを指摘しようとしていたと思います。

Java 8のベストプラクティスは、状態が完全な操作を避けることです。 (これは、既存のオブジェクトを変更していることを意味します。この場合は、以前に作成したメモリにあるオブジェクトにデータを設定しています)

この単純なロジックをJava 8 POJOクラスとそのオブジェクトにデータを設定するmainメソッドを見ることができます。

public class POJO { 

    private Integer age; 
    private LocalDate birthday; 

    public LocalDate getBirthday() { 
     return birthday; 
    } 

    public void setBirthday(LocalDate birthday) { 
     this.birthday = birthday; 
    } 

    public Integer getAge() { 
     return age; 
    } 

    public void setAge(Integer age) { 
     this.age = age; 
    } 

    @Override 
    public String toString() { 
     return "POJO{" + 
       "age=" + age + 
       ", birthday=" + birthday + 
       '}'; 
    } 
} 


public class MapIteration { 

    public static Map<String,Integer> ageMap = new HashMap<>(); 
    private static final String NAME = "Doki"; 
    private static final String START_DATE = "31/10/2016"; 
    private static POJO myDataObject = new POJO(); 
    private static BiConsumer<String,Integer> integerConsumer = (k, v) -> { 
     try { 
      if(NAME.equals(k.toString())) 
       myDataObject.setAge(Integer.valueOf(v.toString())); 
      else if (START_DATE.equals(LocalDate.parse(k.toString()).toString())) 
       myDataObject.setBirthday(LocalDate.parse(k.toString())); 
     } catch (NumberFormatException | DateTimeParseException e) { 
      System.out.println("exception occurred: Because sometimes names cannot be parsed as Date formats"); 
     } 

    }; 
    static{ 
     ageMap.put("John", 23); 
     ageMap.put("Norman", 26); 
     ageMap.put("Micheal", 25); 
     ageMap.put("Doki", 22); 
    } 

    public static void main(String[] args){ 
     ageMap.forEach(integerConsumer); 
     System.out.println(myDataObject); 
    } 
}