Java流和foreach
我有一张地图清单。该映射包含两个值“key”和“value”,我必须从该列表中筛选出特定的值。因此,我在遍历列表,如果映射有我想要的键,那么我获取该值并在另一个pojo中设置它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。这可以使
{
teams=["
{key=NAME, value="ANKIT"},
{key=START_DATE, value=2016-09-01}
}
String START_DATE = "START_DATE";
STRING NAME = "NAME";
我有多个条件要检查。我使用的是foreach
。这可以使用Java8stream()
来完成吗
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())
从地图和流媒体中,您能举个例子吗