Java 列表:根据重复项的数量对重复项进行分组并创建新列表
对不起,我太累了,现在想不出来(太长时间没有睡觉),项目的最后期限是在1小时内 我有一个这样的列表:{aaa,aaa,bbb,ccc,aaa,bbb,ccc,bbb}。 我需要按照以下方式准备myList:Java 列表:根据重复项的数量对重复项进行分组并创建新列表,java,Java,对不起,我太累了,现在想不出来(太长时间没有睡觉),项目的最后期限是在1小时内 我有一个这样的列表:{aaa,aaa,bbb,ccc,aaa,bbb,ccc,bbb}。 我需要按照以下方式准备myList: List<List<String>> myList = new ArrayList<List<String>>(); List myList=new ArrayList(); 根据副本的数量,将其呈现为单独的列表: {aaa,bbb} {c
List<List<String>> myList = new ArrayList<List<String>>();
List myList=new ArrayList();
根据副本的数量,将其呈现为单独的列表:
{aaa,bbb}
{ccc}
这是我的代码:
int maxAnagramsNumber = 0;
Set<String> unique = new HashSet<String>(anagramLineList);
for (String key : unique) { //set max number of anagrams
if (maxAnagramsNumber < Collections.frequency(anagramLineList, key)){
maxAnagramsNumber = Collections.frequency(anagramLineList, key);
}
}
int countedAnagrams = 0;
for (int i=maxAnagramsNumber; i > 1; i--){ // group and make new list items acc.to number of duplicates
for (String anagramUnit : unique){
if(countedAnagrams != i && countedAnagrams != 0){
anagramLineListSorted.add(anagramUnit);
}
countedAnagrams = i;
}
myList.add(anagramLineListSorted);
int-maxAnagramsNumber=0;
Set unique=新哈希集(anagramLineList);
对于(字符串键:唯一){//设置最大字谜数
if(maxAnagramsNumber1;i--){//根据重复项的数量分组并创建新的列表项
for(字符串anagramUnit:unique){
if(countedAnagrams!=i&&countedAnagrams!=0){
anagramlinelistsorded.add(anagramUnit);
}
countedAnagrams=i;
}
添加(anagramLineListSorted);
所有字谜都将具有相同的字符集。创建一个哈希图,将已排序的字符列表作为键,将实际字符串列表作为值。然后最后将所有值合并到一个列表中。试着想想如何做到这一点。如果您有困难,我可以提供一些代码
将原始字符串数组传递到此函数
代码
public List<String> anagrams(String[] strs) {
ArrayList<String> result = new ArrayList<String>();
if(strs == null || strs.length == 0)
return result;
HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
for(int i=0; i<strs.length; i++){
char[] arr = strs[i].toCharArray();
Arrays.sort(arr);
String t = String.valueOf(arr);
if(map.get(t) == null){
ArrayList<Integer> l = new ArrayList<Integer>();
l.add(i);
map.put(t, l);
}else{
map.get(t).add(i);
}
}
for(ArrayList<Integer> l: map.values()){
if(l.size() > 1){
for(Integer i: l){
result.add(strs[i]);
}
}
}
return result;
}
公共列表字谜(String[]strs){
ArrayList结果=新建ArrayList();
if(strs==null | | strs.length==0)
返回结果;
HashMap=newHashMap();
对于(int i=0;i 1){
for(整数i:l){
结果。添加(标准参考文献[i]);
}
}
}
返回结果;
}
如果你所需要的只是划分列表
ArrayList<String> result = new ArrayList<String>();
for(ArrayList<String> l : combined)
for(String g : l)
result.add(g);
ArrayList结果=新建ArrayList();
对于(ArrayList l:组合)
for(字符串g:l)
结果:添加(g);
现在,结果将把所有带有字谜的字符串组合在一起。我还没有编译它(可能有一些语法问题)。但逻辑应该像你所期望的那样起作用
int maxAnagramsNumber = 0;
Set<String> unique = new HashSet<String>(anagramLineList);
Map<String, List<String>> ananas = new Map<String, List<Strin>>();
for (String ana:unique) {
char[] chars = theWord.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
List<String> llist = ananas.get(key)
if (llist == null) {
llist = new List<String>()
ananas.put(key, llist)
}
llist.add(ana)
}
println(ananas);
int-maxAnagramsNumber=0;
Set unique=新哈希集(anagramLineList);
Map ananas=new Map();
for(字符串ana:unique){
char[]chars=theWord.toCharArray();
数组。排序(字符);
字符串键=新字符串(字符);
List llist=ananas.get(键)
if(llist==null){
llist=新列表()
ananas.put(key,llist)
}
添加(ana)
}
println(ananas);
您遇到了什么问题?假设我的列表输出如下:{ccc,ccc}{ccc,ccc}{ccc,ccc}。。。我不知道如何区分正确的列表,更准确地说:一个GRAMLINELIST如下所示:[安第斯山脉,安第斯山脉,丹麦人,丹麦人,迪恩,迪恩,迪恩,邪恶,邪恶,邪恶,女孩,女孩,拉格,拉格,莱维,莱维,莱维,莱维,生活,生活,生活,生活,生活,轿车,轿车,轿车,熔渣,熔渣,街道,测试员,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱]…我不知道如何在我的列表中区分正确的列表:[邪恶,利维,生活,面纱,邪恶][安第斯山脉,丹麦,迪恩斯,塞丹][女孩,拉格,矿渣][街道,测试者][起义]不管怎样,我发现anagramLineList有错误…为什么不迭代组合列表并继续将组件添加到新列表中。这样,所有元素都将按顺序排列。如果发现答案有用,请向上投票/接受:)