我有以下<pre>
<?php
$pattern = '/(\˂[0-9a-z\s#-_="]*\˃((?>[^\˂\˃]+)|(?R))*(\˂\/[a-z]*\˃)?\s*)*/mx';
$subject = <<<EOT
˂div class="post"˃
˂table˃
˂tbody˃
˂tr height="12"˃
˂td˃˂/td˃
˂td width="20" class="strip" rowspan="5"˃
˂div class="follow unpublish"˃☆˂/div˃
˂div class="follow report"˃⚐˂/div˃
˂/td˃
˂/tr˃
˂/tbody˃
˂/table˃
˂/div˃
EOT;
preg_match($pattern, $subject, $matches);
print_r($matches);
?>
</pre>
,根据使用HashMap<String,Integer>
Comparator
Collections.sort(entryList, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Entry<String, Integer> entry1, Entry<String, Integer> entry2) { // TODO Auto-generated method stub return entry2.getValue().compareTo(entry1.getValue()); }
我现在想要按照字典顺序对此地图中的条目进行排序,仅当值相同时(在此示例中为值1)
b=3, cococ=2, 5005=1, p=1, sees=1, k=1, dad=1, pip=1, peep=1
我该怎么做?
答案 0 :(得分:1)
您需要使用双重标准对地图进行排序,首先检查密钥是否相同,然后按键排序......
public int compare(Entry<String, Integer> entry1, Entry<String, Integer> entry2) {
int ret = entry2.getValue().compareTo(entry1.getValue());
if (ret == 0) {// if 0 the are the same then compare the keys
return entry1.getKey().compareTo(entry2.getKey());
}
return ret;
}
答案 1 :(得分:0)
使用java 8和比较器链接的简洁方法:
myMap.entrySet().stream()
.sorted(Entry.<String, Integer>comparingByValue().reversed()
.thenComparing(Entry::getKey))
.collect(toList());
解释。我们基本上是在Set<Map.Entry<String, Integer>>
中传输条目,然后使用comparingByValue()
接口上方便的静态Entry
方法对其进行排序,然后使用reversed()
方法进行反转以获得降序。然后链接另一个比较器,它将使用thenComparing()
方法进行第二级排序,这是Comparator接口上的一个默认方法,它返回一个字典顺序比较器并获取一个函数来提取排序键。我们提供了Entry::getKey
作为参数的确切方法参考。
类型推断。我们必须在复合表达式中的
comparingByValue()
方法中添加额外的类型信息,以便 可以推断出thenComparing()
方法的目标类型。如果 你不能在编译器无法提供的地方提供额外的类型信息 根据类型推断获取类型,您将收到编译器错误。
您的示例。您示例中的代码现在如下所示:
Map<String, Integer> myMap = new HashMap(){{ put("dad", 1); put("pip", 1); put("peep", 1); put("b", 3); put("cococ", 2); put("sees", 1); }};
List<Entry> sortedEntries = myMap.entrySet().stream()
.sorted(Entry.<String, Integer>comparingByValue().reversed()
.thenComparing(Entry::getKey))
.collect(toList());
System.out.print(sortedEntries);
首先从输入
开始{b = 3,peep = 1,看见= 1,爸爸= 1,pip = 1,cococ = 2}
它将返回输出
[b = 3,cococ = 2,dad = 1,peep = 1,pip = 1,看= 1]