使用Java8遍历对象映射列表并获取项目的长度
我有一张物体的地图。我想使用Java8在地图中查找特定项目的长度使用Java8遍历对象映射列表并获取项目的长度,java,lambda,java-8,functional-programming,Java,Lambda,Java 8,Functional Programming,我有一张物体的地图。我想使用Java8在地图中查找特定项目的长度 List<Map<Integer,String>> l = new ArrayList(); Map<Integer,String> m = new HashMap<>(); m.put(1,"Mark"); m.put(2,"Matthew"); l.add(m); public int getLength(int param){ //T
List<Map<Integer,String>> l = new ArrayList();
Map<Integer,String> m = new HashMap<>();
m.put(1,"Mark");
m.put(2,"Matthew");
l.add(m);
public int getLength(int param){
//This Method needs to return the length of Matthew/Mark when being passed 1/2
//l.stream()
when getLength(2) is called it should return 7
}
listl=newarraylist();
Map m=新的HashMap();
m、 放置(1,“标记”);
m、 put(2,“马太”);
l、 加(m);
公共int getLength(int参数){
//当传递1/2时,此方法需要返回Matthew/Mark的长度
//l、 流()
调用getLength(2)时,它应该返回7
}
即使代码中存在一些问题,答案可能是:
public int getLength(String param, List<Map<Integer, String>> l) {
return l.stream()
.filter(e -> e.containsKey(param))
.findFirst()
.map(e -> e.get(param).length())
.orElseThrow(() -> new IllegalArgumentException("Element not found!"));
}
public int getLength(字符串参数,列表l){
返回l.stream()
.过滤器(e->e.containsKey(参数))
.findFirst()
.map(e->e.get(param).length())
.orelsetrow(()->new IllegalArgumentException(“未找到元素!”);
}
您必须找到包含键
param
的映射,我猜您正在查找第一个值,然后您可以获取长度或引发异常(如果未找到元素),如果您想返回默认值,您可以将orelsetrow
替换为orElse
。您不能将Matthew
添加到列表中。然后分享一个确切的例子,你传递什么参数和返回什么值你所说的长度是什么意思?你是在寻找l.stream().flatMap(e->e.values().stream()).filter(param::equals).count()代码>@arzo..你说得对,我更新了代码。@YCF\u L No。。当我通过1或2时,它应该返回映射中相应值的长度。您如何从问题中得出findfirst
行为?@Naman OP确认这一点