2016-10-30 4 views
-1

지도 목록이 있습니다. 지도에는 두 개의 값인 "key"와 "value"가 있습니다.이 목록에서 특정 값을 필터링해야합니다. 그래서 목록을 반복하고 맵에 원하는 키가 있으면 그 값을 가져 와서 다른 pojo에 설정합니다.자바 스트림 및 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

지도 목록이 있습니다. 지도에는 두 개의 값인 "key"와 "value"가 있습니다.이 목록에서 특정 값을 필터링해야합니다. 그래서 목록을 반복하고 맵에 원하는 키가 있으면 그 값을 가져 와서 다른 pojo에 설정합니다. – rksc82

답변

0

Java 8의 새로운 기능을 사용하여 이전 Java 코드를 대체 할 수 없습니다. 나는 모두가 당신이 시도하고있는 사실이 Java 8 스트림의 권장 사용이 아니라는 사실을 지적하려고 노력하고 있다고 생각한다.

Java 8의 최우수 사례는 상태가 완전하지 않은 작업을 피하는 것입니다. (즉, 기존 개체를 수정하고 있습니다.이 경우 이전에 생성 한 메모리에있는 개체에 데이터를 설정하는 것입니다.)

Java 8을 사용하여이 간단한 논리를 작성하려면 스트림에서 POJO 클래스와 그 객체에 데이터를 설정하는 기본 메소드를 볼 수 있습니다.

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); 
    } 
}