2016-10-30 4 views
-1

У меня есть список карт. Карта содержит два значения «ключ» и «значение». Я должен отфильтровать определенные значения из этого списка. Поэтому я повторяю список, и если у карты есть ключ, который я хочу, я беру это значение и устанавливаю его в другое pojo.Java Stream and 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

У меня есть список карт. Карта содержит два значения «ключ» и «значение». Я должен отфильтровать определенные значения из этого списка. Поэтому я повторяю список, и если у карты есть ключ, который я хочу, я беру это значение и устанавливаю его в другое 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); 
    } 
}