Java Stream和foreach

时间:2016-10-30 16:39:29

标签: java foreach java-8 java-stream

我有一张地图清单。地图包含两个值“key”和“value”我必须从该列表中过滤掉特定值。所以我在列表中进行迭代,如果地图上有我想要的密钥,那么我将该值设置为另一个pojo。

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

1 个答案:

答案 0 :(得分: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);
    }
}