Tag: 番石榴

交换Guava MutableValueGraph中的节点

我正在试图替换com.google.common.graph.MutableValueGraph的元素。 我需要在以下数据类中更新元素状态(我知道文档建议要小心): data class Frame(val method: String, val merged: Boolean = false) 由于图形没有提供交换节点的方法,所以我翻译了自己的: fun MutableValueGraph<Frame, Int>.exchangeNode(old: Frame, new: Frame): Boolean { if (old == new) return true if (isDirected) { this.predecessors(old).forEach { this.putEdgeValue(it, new, this.edgeValue(it, old)) } this.successors(old).forEach { this.putEdgeValue(new, it, this.edgeValue(old, it)) } } else { this.adjacentNodes(old).forEach { this.putEdgeValue(it, new, this.edgeValue(it, old)) } } […]

Kotlin:使用google-guava静态方法作为扩展

是否有可能使用现有的Java静态方法作为框中的扩展? 让我们考虑com.google.common.collect.Iterables.transform 。 现在,因为我不知道如何处理这个问题,所以使用提出的方法作为扩展,我必须写下如下的东西: import com.google.common.collect.Iterables.transform public fun <F, T> Iterable<F>.transform(function: Function<in F, out T>) : Iterable<T> { return transform(this, function); } 所以,在这之后我可以使用iterables: Iterable<A> input; Function<A, B> function; Iterable<B> output = input.transform(function); 但是我认为自己宣布扩展是没有必要的。 如何省略这个声明? 更新 我的问题有两个主要的问题: 是否可以导入现有的(静态)方法作为扩展? 不,现在不可能。 如何重用现有的番石榴的Function ,例如transform可重用的? 正如答案中所提出的那样,您应该使用map扩展而不是transform 。 要重用Function s,可以使用这样的扩展: public fun <T, R> Function<T, R>.asFun(): (T) -> R = { […]

番石榴TreeMultimap的Kotlin类型推断失败

我有: data class Edge(val spec: String, val weight: Int) private val graph: SortedSetMultimap<String, Edge> = TreeMultimap.create() 对create()的调用是一个错误: MapCrawler.kt:(63,71):类型推断失败。 期望的类型不匹配:推断的类型是TreeMultimap <(??? .. ???),(??? ..>)>! 但期望SortedSetMultimap 如果我改变它是一个 SortedSetMultimap<String, String> 它工作正常(类型推断没有问题)。 换句话说,这一行编译得很好: private val graph: SortedSetMultimap<String, String> = TreeMultimap.create() 关于类型推理的Edge类是什么?我该如何解决?