java - 程序以按插入频率排序的方式打印字符串

标签 java list sorting collections

可以说我已经插入了
asd dsa asd dsa kk km ka km kk
因此我想将 O/P 打印为:
asd:2
每日需求量:2
公里:2
kk:2
ka:1

这里我提供我已经实现的代码

    import java.util.*;
class Subex1
{
    public static void main(String[] args) 
    {
        try{
        List<String> l=new ArrayList<String>();
        for(String s:args)
        {
            l.add(s);
        }
        Set<String> unique = new HashSet<String>(l);
        for (String key : unique) {
            int count=Collections.frequency(l, key);
            System.out.println(key + ": " +count );
        }
    }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
}

但是这里的 O/P 是这样的
asd:2
卡:1
每日生活津贴:2
kk:2
公里:2

最佳答案

使用比较器进行排序,使用Collections.sort(originalSourceUniqueSet, new MyComparator());

并实现类似的比较器

class MyComparator implements Comparator<String>{
 List<String> originalSource;
 public MyComparator(List<String> originalSource){
  this.originalSource=originalSource;
 }
 @Override
 public int compare(String str1, String str2){
    int result = Collections.frequency(originalSource, str1) -  Collections.frequency(originalSource, str2);
    //if same frequency then sort based on natural ordering
    if(result == 0 ){
        return str1.compareTo(str2);
    }
    return result;
 }
}

关于java - 程序以按插入频率排序的方式打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066545/

相关文章:

JavaScript 按字母顺序排序不对所有值进行排序

java - 从命令提示符编译 java 应用程序时出错

java - 急于获取 PsiElement 标识符的定义?

java - 根据 String[] 创建 int[](特殊计数器)

sql - 如何对包含数字、字符、字符的 varchar 列(SQL)进行排序?

mysql - 根据 StackOverflow 等条件获取问题的最佳方式

java - 存储过程的结果集包含 LinkedCaseInsensitiveMap<V> 列表

css - 如何定位列表中定义的按钮?

python - 在 Python 2.7 中使用多个占位符格式化程序打印字符串

python - Python 中的“Zip”列表字典