I am new to scala andwas trying to convert this to scala code.
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);
}
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)
}
It shows type mismatch within filter.
CodePudding user response:
Double check your imports. I could run your code by using these imports:
import java.io.{BufferedReader, StringReader}
import java.util.Base64
import java.util.stream.Collectors
The code compiled and ran just fine. I just added a println
at the end:
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(", ", ", ")"))
}
Output:
Array(18, 87, -87, -123, -87, -19)
If you are not using Intellij with the Scala plugin, your IDE might not be able to recognize Functional Interfaces
as Single Abstract Methods
. So you might need to adapt your code into a more Java-style approach, like this:
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)
}