您认为这样的迭代器嵌套是好还是坏?
上下文:for循环版本中断,因为我在for循环中使用同义词的同时附加同义词。
// HashSet inside HashMap
HashMap<String, HashSet<String>> synonyms = new HashMap<String, HashSet<String>>();
// loops through synonyms
Iterator word = synonyms.keySet().iterator();
while(word.hasNext()) {
// loops through synonyms
Iterator line = synonyms.get(word.next().toString()).iterator();
while(line.hasNext()) {
// adds to Synonyms, this breaks for loop version
addToSynonyms(word, line.next())
}
}
或者,在for循环版本中,我可以复制HashMap
非常感谢。
下面是一个更好的例子。
import java.util.Iterator;
import java.util.HashSet;
import java.util.HashMap;
// examples of looping through HashMap<String, HashSet<String>> numbersAndWords;
//
public class Example {
HashMap<String, HashSet<String>> numbersAndWords;
public Example() {
numbersAndWords = new HashMap<String, HashSet<String>>();
// data
numbersAndWords.put("five", new HashSet<>());
numbersAndWords.get("five").add(("1 2 3 4 5"));
}
/**
* uses two iterators to loop through numbersAndWords and adds to numbersAndWords without breaking loops
*/
public void exampleOne() {
// loops through HashMap Strings of words "five"
Iterator words = numbersAndWords.keySet().iterator();
while(words.hasNext()) {
// loops through HashSet Strings of numbers "1 2 3 4 5"
Iterator numbers = numbersAndWords.get(words.next().toString()).iterator();
while(numbers.hasNext()) {
// data is arbitrary reason for exmaple is this appends
// numbersAndWords which breaks the for loop
// Their for I have to use an iterator but should I be using to
// or have things in a different format
numbersAndWords.put("three", new HashSet<>());
numbersAndWords.get("three").add(("1, 2, 3"));
numbers.next();
}
}
}
public static void main(String[] args) {
Example example = new Example();
example.exampleOne();
}
}
目前正在考虑使用HashMap.size()用for循环替换第一个itr,这样当我稍后追加HashMap时就不会中断。
非常感谢。
即使在最近的更新之后,这段代码的目的仍然有点模糊。
如果需要创建一些新数据并将其附加到原始地图numbersAndWords
,并且它们在某种程度上取决于原始地图的当前状态,则必须创建并填充一个新的临时地图(使用增强的for
循环,使用带有map/flatMap
的流API,无论什么)。完成后,可以使用map::putAll
:
public void exampleOne() {
Map<String, HashSet<String>> toAppend = new HashMap<>();
for (Map.Entry<String, HashSet<String>> me : numbersAndWords.entrySet()) {
for (String str : me.getValue()) {
System.out.println("Appending for key: " + me.getKey() + "; value=" + str);
toAppend.computeIfAbsent("three", k -> new HashSet<>())
.add("1 2 3"); // or whatever is really needed
}
}
numbersAndWords.putAll(toAppend);
System.out.println(numbersAndWords);
}
假设原始地图是这样设置的:
public Example() {
numbersAndWords = new HashMap<String, HashSet<String>>();
// data
numbersAndWords.computeIfAbsent("five", k -> new HashSet<>()).add("1 2 3 4 5");
numbersAndWords.computeIfAbsent("five", k -> new HashSet<>()).add("5 4 3 2 1");
numbersAndWords.computeIfAbsent("four", k -> new HashSet<>()).add("1 2 3 4");
}
调用new Example()时,输出如下。例一()
:
Appending for key: four; value=1 2 3 4
Appending for key: five; value=1 2 3 4 5
Appending for key: five; value=5 4 3 2 1
{four=[1 2 3 4], five=[1 2 3 4 5, 5 4 3 2 1], three=[1 2 3]}
然而,这种硬编码值的填充是非常没有意义的,因为不能在映射中为硬编码键创建重复条目,并且将相同的值添加到集合中是无用的。
我有以下python生成器: 而且我想在Java中实现一个迭代器,它的行为有点像以前的生成器。我试图使用两个内部迭代器,但它不起作用。想法?
问题内容: 考虑以下代码: 我有一些要求,例如我想读取/获取所有类型的键和值以进行某些处理,但我无法定义它,因为我将获得动态JSON输入(例如,作为字符串,那么第二级循环将给我索引)数组并处理每个具有key 和的JSON 。 我希望遍历其中包含的每个键/值对,浏览地图的最有效方法是什么? 注意:我是Go-lang的新手,也欢迎您提出问题。 问题答案: 请参阅此博客条目,该条目彻底涵盖了该主题,尤其
我有一个现有的循环,在两条水平线上绘制标签和文本框(第1行作为标签,第2行作为文本框)。当时,循环是基于每个类型的元素不超过12个的明确要求。这是使用两个循环编写的(一个循环表示标签,另一个循环作为输入框): 画标签 绘制文本框 现在,考虑到天数,每个组件类型的元素数量(在hdrLabel.length-2中)现在增加到最多31个。由于移动设备和平板电脑的间距问题,我们决定最好每行绘制12个元素。
制作一个单页的WordPress主题。使用此循环调用所有页面并将其显示为部分(html5标记): 这将创建一个基于页面的漂亮的小循环部分。我唯一关心的是:其中一个“页面”/部分应该显示一些博客文章。正在寻找一种基本上在循环中创建循环的方法——可以随页面一起重新排序。 所以我想我的问题是: 这段代码看起来像什么 谢谢
我用For创建了一个嵌套循环,这是程序代码和输出,然后我尝试了同时循环,得到了不同的结果 对于 虽然 请引导我。。谢谢
我有以下Python生成器: 而且我想在Java中实现一个,它的行为有点像之前的生成器。我曾尝试使用两个内部迭代器,但它不起作用。 我该怎么修?