我有一张地图清单。地图包含两个值“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")));
}
});
答案 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);
}
}