动态列表中字符的每个组合
Every combination of characters from dynamic list
我被一个逻辑困住了。我有一个自由文本下拉菜单,用户可以在其中自由输入最多 5 个字符。现在每个字符都有与之关联的 unicode 重音字符。我为字符关联的列表生成 unicode 字符。现在我想用列表中的字符生成所有可能的组合。我有点卡住了,因为列表是动态生成的。我怎么可能知道应该首先迭代哪个列表?下面是我的代码。
//example String key="za";
if (key!=null) {
List<Character> characList = key.chars()
.mapToObj(c -> (char) c)
.collect(Collectors.toList());//[z, a]
List<List<String>> mainList = new ArrayList<List<String>>();
for (Character characterObj:characList) {
List<String> subList = new ArrayList<String>();
Collection<String> charColl = unicodeMap.getCollection(characterObj.toString());
subList = new ArrayList(charColl);//first iteration we get [ż, ź, ž] second iteration we get [à, á, â, ã, ä, å, ą, ă, ā]
mainList.add(subList);//[[ż, ź, ž], [à, á, â, ã, ä, å, ą, ă, ā]]
}
}
现在我想从 [[ż, ź, ž], [à, á, â, ã, ä, å, ą, ă, ā]]
生成 String
的组合。
String
可能是 azstu 等。我如何进行迭代,以便处理来自输入 String
的关联的所有组合。请指教
示例字符串的期望输出:-
żà
żá
żâ
żã
żä
żå
żą
żă
żā
.
.
.
一种方法可以递归地生成字符串。按索引遍历角色的集合列表并循环遍历每个子列表。
List<String> genr(List<List<String>> list, int index, String now) {
if (index >= list.size()) {
return Arrays.asList(now);
}
List<String> subList = list.get(index);
List<String> res = new ArrayList<>();
for (String value : subList) {
res.addAll(genr(list, index + 1, now + value));
}
return res;
}
并像
一样打电话
List<List<String>> mainList = new ArrayList<List<String>>();
mainList.add(Arrays.asList("ż", "ź", "ž"));
mainList.add(Arrays.asList("à", "á", "â", "ã", "ä", "å", "ą", "ă", "ā"));
List<String> data = genr(mainList, 0, "");
输出:
[żà, żá, żâ, żã, żä, żå, żą, żă, żā, źà, źá, źâ, źã, źä, źå, źą, źă, źā, žà, žá, žâ, žã, žä, žå, žą, žă, žā]
演示 here
我被一个逻辑困住了。我有一个自由文本下拉菜单,用户可以在其中自由输入最多 5 个字符。现在每个字符都有与之关联的 unicode 重音字符。我为字符关联的列表生成 unicode 字符。现在我想用列表中的字符生成所有可能的组合。我有点卡住了,因为列表是动态生成的。我怎么可能知道应该首先迭代哪个列表?下面是我的代码。
//example String key="za";
if (key!=null) {
List<Character> characList = key.chars()
.mapToObj(c -> (char) c)
.collect(Collectors.toList());//[z, a]
List<List<String>> mainList = new ArrayList<List<String>>();
for (Character characterObj:characList) {
List<String> subList = new ArrayList<String>();
Collection<String> charColl = unicodeMap.getCollection(characterObj.toString());
subList = new ArrayList(charColl);//first iteration we get [ż, ź, ž] second iteration we get [à, á, â, ã, ä, å, ą, ă, ā]
mainList.add(subList);//[[ż, ź, ž], [à, á, â, ã, ä, å, ą, ă, ā]]
}
}
现在我想从 [[ż, ź, ž], [à, á, â, ã, ä, å, ą, ă, ā]]
生成 String
的组合。
String
可能是 azstu 等。我如何进行迭代,以便处理来自输入 String
的关联的所有组合。请指教
示例字符串的期望输出:-
żà
żá
żâ
żã
żä
żå
żą
żă
żā
.
.
.
一种方法可以递归地生成字符串。按索引遍历角色的集合列表并循环遍历每个子列表。
List<String> genr(List<List<String>> list, int index, String now) {
if (index >= list.size()) {
return Arrays.asList(now);
}
List<String> subList = list.get(index);
List<String> res = new ArrayList<>();
for (String value : subList) {
res.addAll(genr(list, index + 1, now + value));
}
return res;
}
并像
一样打电话List<List<String>> mainList = new ArrayList<List<String>>();
mainList.add(Arrays.asList("ż", "ź", "ž"));
mainList.add(Arrays.asList("à", "á", "â", "ã", "ä", "å", "ą", "ă", "ā"));
List<String> data = genr(mainList, 0, "");
输出:
[żà, żá, żâ, żã, żä, żå, żą, żă, żā, źà, źá, źâ, źã, źä, źå, źą, źă, źā, žà, žá, žâ, žã, žä, žå, žą, žă, žā]
演示 here