我是 Scala 的新手,并試圖將其轉換為:
public static byte[] convertPemToDer(String pem) {
BufferedReader bufferedReader = new BufferedReader(new StringReader(pem));
String encoded =
bufferedReader
.lines()
.filter(line -> !line.startsWith("-----BEGIN") && !line.startsWith("-----END"))
.collect(Collectors.joining());
return Base64.getDecoder().decode(encoded);
}
到 Scala 代碼:
def convertPemToDer(pem: String): Array[Byte] = {
val bufferedReader = new BufferedReader(new StringReader(pem))
val encoded = bufferedReader.lines.filter((line: String) => !line.startsWith("-----BEGIN") && !line.startsWith("-----END")).collect(Collectors.joining)
Base64.getDecoder.decode(encoded)
}
它顯示了過濾器中的這種型別不匹配:
type mismatch; found : String => Boolean required: java.util.function.Predicate[_ >: String]
uj5u.com熱心網友回復:
仔細檢查您的進口。我可以使用這些匯入來運行您的代碼:
import java.io.{BufferedReader, StringReader}
import java.util.Base64
import java.util.stream.Collectors
代碼編譯并運行得很好。我只是println在最后添加了一個:
object Main extends App {
def convertPemToDer(pem: String): Array[Byte] = {
val bufferedReader = new BufferedReader(new StringReader(pem))
val encoded = bufferedReader.lines
.filter((line: String) =>
!line.startsWith("-----BEGIN") && !line.startsWith("-----END")
)
.collect(Collectors.joining)
Base64.getDecoder.decode(encoded)
}
println(convertPemToDer("Elephant").mkString("Array(", ", ", ")"))
}
輸出:
Array(18, 87, -87, -123, -87, -19)
如果您未將 Intellij 與 Scala 插件一起使用,您的 IDE 可能無法識別Functional Interfaces為Single Abstract Methods. 因此,您可能需要將代碼調整為更 Java 風格的方法,如下所示:
def convertPemToDer(pem: String): Array[Byte] = {
val bufferedReader = new BufferedReader(new StringReader(pem))
val encoded = bufferedReader.lines
.filter(new Predicate[String] {
override def test(line: String): Boolean =
!line.startsWith("-----BEGIN") && !line.startsWith("-----END")
})
.collect(Collectors.joining)
Base64.getDecoder.decode(encoded)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/496942.html
上一篇:型別引數的功能障礙
