java - 如何遍历对的数组列表以检索指定键的值?
问题描述
我一直在尝试用 Java 编写一个函数 Retrieve,它接受一个键并从 Pairs 的数组列表中返回一个值。有什么建议么?
ArrayList<Pair<K,V>> set_of_pairs = new ArrayList<Pair<K,V>>();
public void insert(K key, V value) {
Pair<K,V> pair = new Pair<K,V>(key,value);
set_of_pairs.add(pair);
}
public void traverse(Visitor<K,V> visitor) {
}
public V retrieve(K key) {
int i = 0;
if (set_of_pairs.containsKeys(key) == false) {
return null;
}
else {
for(Pair<K,V> set_of_pairs: pair) {
if (pair.getKey() == key) {
return pair.getValue();
}
}
}
}
解决方案
您可以将您的retrieve
方法逻辑更正为:
public V retrieve(K key) {
// iterating on each element of the list would suffice to check if a key exists in the list
for (Pair<K, V> pair : set_of_pairs) { // iterating on list of 'Pair's
if (pair.getKey().equals(key)) { // 'equals' instead of ==
return pair.getValue();
}
}
return null;
}
此外,这可以简化为使用java-stream的逻辑,并按照 shmosel 的指示进行调整
public V retrieveUsingStreams(K key) {
return set_of_pairs.stream()
.filter(pair -> pair.getKey().equals(key)) // the 'if' check
.findFirst() // the 'return' in your iterations
.map(Pair::getValue) // value based on the return type
.orElse(null); // else returns null
}
推荐阅读
- c - 使用 Windows API 使用互斥锁方法创建 100 个线程导致意外结果,如何解决?
- npm - 如何使用 npm start 打开 localhost
- html - 为什么不会'justify-content:space-between'使导航栏转到右侧?
- python - 如何检查一个文档中的一行是否适用于同一行,但在另一个文档中
- json - 在django模板中将json字符串转换为日期时间格式dd/mm/yyyy
- html - 无法在 R Shiny 的 HTML 标记中使用“for”关键字
- c# - 如何获取我的控制器的 url 参数?
- go - 无法导入 fmt。(或任何其他基本库)VS Code Go 扩展
- ffmpeg - 将 mp4 转换为 HLS VOD 时可变段大小
- python - 如何在循环中创建多维 json 对象?