Java流和foreach

Java流和foreach,java,foreach,java-8,java-stream,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。这可以使

我有一张地图清单。该映射包含两个值“key”和“value”,我必须从该列表中筛选出特定的值。因此,我在遍历列表,如果映射有我想要的键,那么我获取该值并在另一个pojo中设置它

{ 
teams=["
{key=NAME, value="ANKIT"}, 
{key=START_DATE, value=2016-09-01}
}
String START_DATE = "START_DATE";
STRING NAME = "NAME";
我有多个条件要检查。我使用的是
foreach
。这可以使用Java8
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")));
    } 
});

您不能使用Java8新特性来替换旧的Java代码。我认为,正如每个人都试图指出的那样,您正在尝试的并不是推荐使用Java8流

Java8中的最佳实践是避免状态完整操作。(这意味着,您正在修改现有对象。在本例中,您正在为驻留在先前创建的内存中的对象设置数据)

如果您仍然希望使用Java8流编写这个简单的逻辑,那么下面可以看到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);
    }
}
公共类POJO{
私人整数年龄;
私人生日;
public LocalDate getBirthday(){
回归生日;
}
公共无效挫折第一天(LocalDate生日){
这个生日=生日;
}
公共整数getAge(){
回归年龄;
}
公共无效设置(整数期限){
这个。年龄=年龄;
}
@凌驾
公共字符串toString(){
返回“POJO{”+
“年龄=”+年龄+
“,生日=”+生日+
'}';
}
}
公共类映射{
publicstaticmapagemap=newhashmap();
私有静态最终字符串NAME=“Doki”;
私有静态最终字符串开始\u日期=“31/10/2016”;
私有静态POJO myDataObject=new POJO();
私有静态双消费者integerConsumer=(k,v)->{
试一试{
if(NAME.equals(k.toString()))
设置(Integer.valueOf(v.toString());
else if(START_DATE.equals(LocalDate.parse(k.toString()).toString()))
myDataObject.setBirthday(LocalDate.parse(k.toString());
}捕获(NumberFormatException | DateTimeParseException e){
System.out.println(“发生异常:因为有时名称无法解析为日期格式”);
}
};
静止的{
“约翰”,23岁;
阿格迈普·普特(《诺曼》,26);
“麦可尔”,25岁;
阿格迈普·普特(“Doki”,22);
}
公共静态void main(字符串[]args){
ageMap.forEach(整合消费者);
System.out.println(myDataObject);
}
}

为什么要通过流来实现这一点?甚至在我们开始讨论流之前。。。你到底想干什么?我有一张地图清单。该映射包含两个值“key”和“value”,我必须从该列表中筛选出特定的值。因此,我在遍历列表,如果映射有我想要的键,那么我将获取该值并在另一个pojo中设置它。
映射包含两个值“key”和“value”
,通常一个映射将包含多个键和值,您可以得到一个
.keySet()
或一个
.entrySet())
从地图和流媒体中,您能举个例子吗