scala - 如何在 intellij 中使用 scala.collection.JavaConverters?
问题描述
我想在scala中使用java nio,我尝试将此代码转换为scala:
ServerSocketChannel ssChannel = ServerSocketChannel.open();
int port = 9001;
ssChannel.bind(new InetSocketAddress(port));
Selector selector = Selector.open();
ssChannel.configureBlocking(false);
ssChannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
selector.select();
Set<SelectionKey> keys = selector.selectedKeys();
for (SelectionKey key : keys) {
if (key.isAcceptable()) {
ServerSocketChannel ssc = (ServerSocketChannel) key
.channel();
SocketChannel sc = ssc.accept();
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
}
if(key.isReadable()){
SocketChannel sc = (SocketChannel) key.channel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
sc.read(buffer);
buffer.flip();
sc.write(buffer);
}
}
keys.clear();
}
}
当我将此代码复制到 intellij 时,intellij 询问我是否要将此代码转换为 scala,我同意。
然后是intellij
import scala.collection.JavaConversions._,
告诉我一个红色错误
我在 intellij 中使用 scala 2.12.7,我检查了 scala api 文档,JavaConversion 已弃用,所以我
import scala.collection.JavaConverters._
但是intellij告诉我它已被弃用,让我使用
scala.jdk.CollectionConverters
当我导入这个时,该行仍然有错误:
key.isAcceptable
那么如何在 intellij 中转换此代码?谢谢!
我的intellij版本是2018.3.4社区版
解决方案
这是您的 Java 代码的非常简单的逐行翻译。
我不知道它是否符合您的要求,很长一段时间以来,我没有做过太多的 NIO,也没有涉足 Java 领域,但它确实可以编译。
import java.nio.channels.{ServerSocketChannel,Selector,SelectionKey,SocketChannel}
import java.net.InetSocketAddress
import java.nio.ByteBuffer
import collection.JavaConverters._
val ssChannel :ServerSocketChannel = ServerSocketChannel.open()
val port = 9001
ssChannel.bind(new InetSocketAddress(port))
val selector :Selector = Selector.open()
ssChannel.configureBlocking(false)
ssChannel.register(selector, SelectionKey.OP_ACCEPT)
while (true) {
selector.select()
val keys :collection.mutable.Set[SelectionKey] = selector.selectedKeys().asScala
for (key <- keys) {
if (key.isAcceptable()) {
val ssc :ServerSocketChannel = key.channel().asInstanceOf[ServerSocketChannel]
val sc :SocketChannel = ssc.accept()
sc.configureBlocking(false)
sc.register(selector, SelectionKey.OP_READ)
}
if(key.isReadable()){
val sc :SocketChannel = key.channel().asInstanceOf[SocketChannel]
val buffer :ByteBuffer = ByteBuffer.allocate(1024)
sc.read(buffer)
buffer.flip()
sc.write(buffer)
}
}
keys.clear()
}
您会注意到,在此示例中,JavaConverters
它仅用于mutable.Set
从 Java获取 Scala Set
,并且仅用于使foreach()
(内部理解)工作。
推荐阅读
- xml - 缺少带有根元素的 Web 方法返回数据表
- uwp - 亚克力画笔在不对焦时的不透明度
- kdb - kdb中一列中空字符列表的复杂列表
- linux - 如何结束 GNU sed 中的“i”命令?
- php - 如何检查现有元素的数组以分配票号?
- javascript - 这个变量是什么 ([{ name, objectItem }, ...object]: any, row = [])
- dynamics-crm - 如何通过javascript或api在动态crm中通过文本搜索从多个实体中获取记录?
- angular - 拦截方法中不可见变量值-HTTP拦截器Angular
- python - python多处理进程池找不到异步函数
- c++ - 游标和节点的AST遍历有什么区别