问题描述
我想按属性对对象列表进行分组,然后使用(Key,Value)对迭代结果。
我已经在Java 8中找到了使用如下属性对对象列表进行分组的方法
// filteredPageLog has the filtered results from PageLog entity.
Map<String, List<PageLog>> results =
filteredPageLog.stream().collect(Collectors.groupingBy(p -> p.getSessionId()));
但结果将只有入口集(在entrySet属性中有值)。 keySet和valueSet将具有空值。 我想迭代一些类似的东西
results.forEach((key,value) -> {
//logic
});
1楼
使用
results.entrySet().forEach(entry -> {
var key = entry.getKey();
var value = entry.getValue();
//logic
});
2楼
虚拟map
:
Map<String,String> map = new HashMap() {{
put("1","20");
put("2","30");
}};
你可以用两种方式做到:
1. Map<K, V>.forEach()
需要一个BiConsumer<? super K,? super V>
BiConsumer<? super K,? super V>
BiConsumer<? super K,? super V>
作为参数, BiConsumer<T, U>
抽象方法的签名是accept(T t, U u)
。
map.forEach((keys,values) -> { String k = keys ;
String v= values;
//logic goes here
});
2. Map<K, V>.entrySet().forEach()
期望Consumer<? super T>
Consumer<? super T>
作为参数, Consumer<T>
抽象方法的签名是accept(T t)
。
map.entrySet().forEach((entry) -> { String k = entry.getKey();
String v= entry.getValue();
//logic goes here
});
3楼
Java中没有元组。 您可以找到更详细的解释。 您可以迭代键,值或条目,但不能迭代元组。