我正在用Java实现Kotlin接口,希望我返回一个$ xmllint -format so-output.xml
。
如何将Java集合转换为Kotlin <?xml version="1.0"?>
<EnterpriseDocument>
<FuelTankList>
<Tank fuelItem="Diesel" Sales="5000"/>
<Tank fuelItem="Petrol" Sales="1000"/>
</FuelTankList>
</EnterpriseDocument>
?相反,如何将Kotlin Sequence<T>
转换为Java集合?
答案 0 :(得分:1)
由于Kotlin代码是从Java运行的,因此变得有些棘手。
让我们尝试重新创建场景:
科特琳:
interface SequenceInterface {
fun foo(list: List<Int>) : Sequence<Int>
}
如果检查Kotlin代码,则会发现Sequence
接口没有特定的实现。因此,在您的情况下,您需要自己实现(就像Kotlin在调用asSequence
时所做的一样:
public class Foo implements SequenceInterface {
@NotNull
public Sequence<Integer> foo(final List<Integer> list) {
return () -> list.listIterator();
}
}
然后可以开始在Java中使用它:
new Foo().foo(Arrays.asList(42))
请记住,由于所有有用的方法都是作为Kotlin扩展实现的,因此它们都会消失。
是否要转换为List
?在纯Java中,只需重申一下:
ArrayList<Integer> list = new ArrayList<>();
seq.iterator().forEachRemaining(list::add);
此外,请确保您绝对需要用Kotlin的代码返回Sequence
。如果要实现更好的互操作性,则返回Stream
会更有意义。
答案 1 :(得分:0)
以下是一些转换:
val javaList = java.util.ArrayList<String>()
javaList.addAll(listOf("A", "B", "C"))
// From Java List to Sequence
val seq = sequenceOf(*javaList.toTypedArray())
// or
val seq2 = javaList.asSequence()
// Sequence to Kotlin List
val list = seq.toList()
// Kotlin List to Sequence
val seqFromList = sequenceOf(*list.toTypedArray())
// or
val seqFromList2 = list.asSequence()
// Sequence to Java List
val newJavaList = java.util.ArrayList<String>().apply { seqFromList.toCollection(this) }
// or
val newJavaList2 = java.util.ArrayList<String>()
newJavaList2.addAll(seqFromList)
答案 2 :(得分:0)
赞:
val javaList = java.util.ArrayList<String>()
val kotlinSeq = javaList.asSequence()
val newJavaList = java.util.ArrayList<String>().apply { kotlinSeq.toCollection(this) }