简单的方法来计算字符串的出现和他们进行排序(Simple way to count occurren

2019-09-19 13:19发布

我在看的字符串,例如冗余列表

{ "One", "One", "One", "Two", "Three", "Three" }

什么是计数发生的最好办法,然后创建一个字符串的非冗余列表,按出现次数排序

我想结果是这样的名单:

{ "One", "Three", "Two" }

Answer 1:

您可以在这个问题的最投票回答使用的伎俩如何通过自己的价值观地图进行排序 。

下面是一个示例实现(我添加泛型到比较):

  • 你的琴弦/ OCCURENCES添加到一个HashMap
  • 把一切都放在一个TreeMap与排序上的值自定义比较
  • 把钥匙返回到列表中
public static void main(String[] args) {
    String[] strings = {"One", "One", "One", "Two", "Three", "Three"};

    //Count occurences
    Map<String, Integer> map = new HashMap<String, Integer>();

    for (String s : strings) {
        if (map.containsKey(s)) {
            map.put(s, map.get(s) + 1);
        } else {
            map.put(s, 1);
        }
    }

    ValueComparator<String, Integer> comparator = new ValueComparator<String, Integer> (map);
    Map<String, Integer> sortedMap = new TreeMap<String, Integer> (comparator);
    sortedMap.putAll(map);

    List<String> sortedList = new ArrayList<String> (sortedMap.keySet());

    System.out.println(sortedMap);
    System.out.println(sortedList);

}

static class ValueComparator<K, V extends Comparable<V>> implements Comparator<K> {

    Map<K, V> map;

    public ValueComparator(Map<K, V> base) {
        this.map = base;
    }

    @Override
    public int compare(K o1, K o2) {
         return map.get(o2).compareTo(map.get(o1));
    }
}


Answer 2:

它可以快速用Java 8来完成。

Map<String, Long> sortedByCountSet =  Stream.of("One", "One", "One", "Two", "Three", "Three")
            .collect(Collectors.groupingBy(str->str,TreeMap::new,Collectors.counting()));

System.out.println(sortedByCountSet);

这里输出: -

{一个= 3,三= 2,两个= 1}

要么

Map<String, Long> sortedByCountSet = Stream.of("One", "One", "One", "Two", "Three", "Three","Five","Five")
            .collect(Collectors.groupingBy(str->str, Collectors.counting()))
            .entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));

输出: -

{两= 1,五= 2,三= 2,一个= 3}



Answer 3:

您可以创建一个地图,通过你的列表中,每次你遇到一个新的次数放入列表和设置整数值为1,每次你遇到一个重复的只是一个特定的键增加值。

然后再通过创造从HashMap中的计数的排序列表。

或者,正如其他人使用一个TreeMap可以让你排序,而不是creatign sepearet名单建议。



文章来源: Simple way to count occurrences of String and sort by them