Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么按值对地图进行番石榴排序有效?_Java_Generics_Guava - Fatal编程技术网

Java 为什么按值对地图进行番石榴排序有效?

Java 为什么按值对地图进行番石榴排序有效?,java,generics,guava,Java,Generics,Guava,我是Guava库的新手,尝试使用它的一些类来简化代码。我遇到了按值对地图排序的需要。找到一个快速搜索,该搜索将接受的答案发布为以下代码段: Ordering<Map.Entry<Key, Value>> entryOrdering = Ordering.from(valueComparator) .onResultOf(new Function<Entry<Key, Value>, Value>() { public Value app

我是Guava库的新手,尝试使用它的一些类来简化代码。我遇到了按值对地图排序的需要。找到一个快速搜索,该搜索将接受的答案发布为以下代码段:

Ordering<Map.Entry<Key, Value>> entryOrdering = Ordering.from(valueComparator)
  .onResultOf(new Function<Entry<Key, Value>, Value>() {
    public Value apply(Entry<Key, Value> entry) {
      return entry.getValue();
    }
  }).reverse();
// Desired entries in desired order.  Put them in an ImmutableMap in this order.
ImmutableMap.Builder<Key, Value> builder = ImmutableMap.builder();
for (Entry<Key, Value> entry : 
    entryOrdering.sortedCopy(map.entrySet())) {
  builder.put(entry.getKey(), entry.getValue());
}
return builder.build();
// ImmutableMap iterates over the entries in the desired order
在这种情况下,这意味着:

<F> = Entry<Key, Value>
<? extends T> = Value
=条目

这里创建了三种不同的订单,其中一种订单的类型不同于其他订单。您的代码将被改写为:

Ordering<Value> valueOrdering = Ordering.from(valueComparator);
Ordering<Map.Entry<Key, Value>> entryOrdering = valueOrdering
     .onResultOf(new Function<Entry<Key, Value>, Value>() {
         public Value apply(Entry<Key, Value> entry) {
            return entry.getValue();
         }
});
Ordering<Map.Entry<Key, Value>> finalOrdering = entryOrdering.reverse();
Ordering valueOrdering=Ordering.from(valueComparator);
Ordering entryOrdering=valueOrdering
.onResultOf(新函数(){
公共值应用(条目){
返回条目.getValue();
}
});
Ordering finalOrdering=entryOrdering.reverse();

此处创建了三种不同的订单,其中一种订单的类型不同于其他订单。您的代码将被改写为:

Ordering<Value> valueOrdering = Ordering.from(valueComparator);
Ordering<Map.Entry<Key, Value>> entryOrdering = valueOrdering
     .onResultOf(new Function<Entry<Key, Value>, Value>() {
         public Value apply(Entry<Key, Value> entry) {
            return entry.getValue();
         }
});
Ordering<Map.Entry<Key, Value>> finalOrdering = entryOrdering.reverse();
Ordering valueOrdering=Ordering.from(valueComparator);
Ordering entryOrdering=valueOrdering
.onResultOf(新函数(){
公共值应用(条目){
返回条目.getValue();
}
});
Ordering finalOrdering=entryOrdering.reverse();

可能您被这样的事实弄糊涂了,类
排序
声明为
排序
,但是
onResultOf
方法的返回值是
排序

您提供给
onResultOf
函数的第一个类型参数是结果的类型参数


这也意味着,
Value
不是强制成为
Map的子类型。Entry

可能您被以下事实弄糊涂了,类
Ordering
声明为
Ordering
,但是
onResultOf
方法的返回值是
Ordering

您提供给
onResultOf
函数的第一个类型参数是结果的类型参数


这也意味着,
不强制成为
映射的子类型。条目
onResultOf
的方法签名为:

public <F> Ordering<F> onResultOf(Function<F,? extends T> function)

因此,
onResultOf
的参数实际上是
Function
,因此,第二个参数不必扩展
映射。条目

onResultOf
的方法签名为:

public <F> Ordering<F> onResultOf(Function<F,? extends T> function)
因此,
onResultOf
的参数实际上是
Function
,因此,第二个参数不必扩展
Map.Entry