小编Ben*_*n H的帖子

如何使用新的computeIfAbsent函数?

我非常想使用Map.computeIfAbsent,但是因为lambdas在本科课程中已经太长了.

几乎直接来自文档:它给出了一个旧方法的例子:

Map<String, Boolean> whoLetDogsOut = new ConcurrentHashMap<>();
String key = "snoop";
if (whoLetDogsOut.get(key) == null) {
  Boolean isLetOut = tryToLetOut(key);
  if (isLetOut != null)
    map.putIfAbsent(key, isLetOut);
}
Run Code Online (Sandbox Code Playgroud)

而新的方式:

map.computeIfAbsent(key, k -> new Value(f(k)));
Run Code Online (Sandbox Code Playgroud)

但在他们的例子中,我认为我并没有"得到它".我如何转换代码以使用新的lambda表达方式?

java lambda dictionary java-8

98
推荐指数
4
解决办法
12万
查看次数

现有的3函数回调Kotlin协同程序

我有一个具体例子的一般性问题:在拍照时,我想在Android中使用Kotlin协程魔法而不是回调地狱.

manager.openCamera(cameraId, object : CameraDevice.StateCallback() {
    override fun onOpened(openedCameraDevice: CameraDevice) {
        println("Camera onOpened")
        // even more callbacks with openedCameraDevice.createCaptureRequest()....
    }

    override fun onDisconnected(cameraDevice: CameraDevice) {
        println("Camera onDisconnected")
        cameraDevice.close()
    }
    ...
Run Code Online (Sandbox Code Playgroud)

我怎么把它转换成......错误......不那么难看的东西? 是否可以使用三个左右的函数进行平均回调,并通过将主流指定为promise-result路径将其转换为promise链? 如果是这样,我应该/我是否应该使用协同程序使其异步?

我喜欢async和.await会产生的东西

manager.open(cameraId).await().createCaptureRequest()
Run Code Online (Sandbox Code Playgroud)

我试图通过以下内容来做到这一点,但是...我不认为我正在使用CompletableDeferred!

suspend fun CameraManager.open(cameraId:String): CameraDevice {
    val response = CompletableDeferred<CameraDevice>()
    this.openCamera(cameraId, object : CameraDevice.StateCallback() {
        override fun onOpened(cameraDevice: CameraDevice) {
            println("camera onOpened $cameraDevice")
            response.complete(cameraDevice)
        }

        override fun onDisconnected(cameraDevice: CameraDevice) {
            response.completeExceptionally(Exception("Camera onDisconnected $cameraDevice"))
            cameraDevice.close()
        }

        override fun onError(cameraDevice: CameraDevice, error: Int) {
            response.completeExceptionally(Exception("Camera onError $cameraDevice …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-coroutines

20
推荐指数
2
解决办法
6335
查看次数

在Android Studio 3.1中构建项目时出现“压缩执行失败”错误

我正在尝试在Android Studio 3.1预览版中构建https://github.com/neural-nuts/Cam2Caption,但是我使用的是很旧的build.gradle,或者它死于

Error:Execution failed for task ':Application:packageDebug'.
Execution of compression failed.
Run Code Online (Sandbox Code Playgroud)

在清理项目或重建之后,会发生这种情况。OSX,最新的一切。我正在使用我认为是默认的最新最大build.gradle

classpath 'com.android.tools.build:gradle:3.0.0'
...
android {
    compileSdkVersion 26
    defaultConfig {
        minSdkVersion 26
        targetSdkVersion 26
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
....
        compile "com.android.support:support-v4:26.1.0"
        compile "com.android.support:support-v13:26.1.0"
        compile "com.android.support:cardview-v7:26.1.0"
        compile "com.android.support:appcompat-v7:26.1.0"
Run Code Online (Sandbox Code Playgroud)

有了stacktrace,我得到了

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Application:packageDebug'.
> java.io.IOException: Execution of compression failed.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':Application:packageDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin android-studio-3.0

13
推荐指数
1
解决办法
7501
查看次数

如何限制kotlin协同程序的最大并发性

我有一个Sequence(来自File.walkTopDown),我需要在每个上运行一个长时间运行的操作.我想使用Kotlin最佳实践/协同程序,但我要么没有并行性,要么太多并行性并且遇到"太多打开文件"IO错误.

File("/Users/me/Pictures/").walkTopDown()
    .onFail { file, ex -> println("ERROR: $file caused $ex") }
    .filter { ... only big images... }
    .map { file ->
        async { // I *think* I want async and not "launch"...
            ImageProcessor.fromFile(file)
        }
    }
Run Code Online (Sandbox Code Playgroud)

这似乎没有并行运行,我的多核CPU永远不会超过1 CPU的价值.是否有协同程序运行"NumberOfCores并行操作"值得延期的工作?

使用Kotlin协同程序查看多线程,它首先创建所有作业,然后加入它们,但这意味着在重处理连接步骤之前完成序列/文件树步骤,这似乎......如果!将其拆分为收集和处理步骤意味着收集可以在处理之前运行.

val jobs = ... the Sequence above...
    .toSet()
println("Found ${jobs.size}")
jobs.forEach { it.await() }
Run Code Online (Sandbox Code Playgroud)

parallel-processing multithreading kotlin kotlinx.coroutines

8
推荐指数
4
解决办法
1832
查看次数

在 JavaMail 中搜索 - 如何让它在服务器端发生?

我想我遗漏了一些关于如何在 JavaMail 中搜索的信息。

  1. 从文件夹下载空邮件
  2. 创建一个与您的结果匹配的新 SearchTerm
  3. 使用您的搜索词过滤 (yourFolder.search) 结果。

这有效。但是——为什么要这样做?如果我使用 javamail 连接到诸如 gmail 之类的东西,则搜索不会在服务器端执行,而且使用整个 javax.mail.search.SearchTerm 构造似乎没有任何优势提高效率或减少需要通过网络发送的数据量...

我没有看到任何在服务器端执行搜索并返回匹配列表的方法。有任何想法吗?

编辑:包括我现在正在做的伪代码,它不会在服务器端执行任何搜索。即使我将其转换为使用SearchTerm,它仍然不会在服务器端做任何事情,对吗?

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "gimaps");
final Session session = Session.getDefaultInstance(props, null);
final GmailSSLStore store = (GmailSSLStore) session.getStore("gimaps");
store.connect(ADDRESS, PASSWORD);
final GmailFolder allMailFolder = (GmailFolder) store.getFolder("[Gmail]/All Mail");
allMailFolder.open(Folder.READ_ONLY);
final Message[] allMessages = allMailFolder.getMessages();
System.out.println("Messages:" + allMessages.length);

FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
allMailFolder.fetch(allMessages, fp);

for (final Message message : allMessages) {
  final Address[] addrs = message.getFrom();
  if (addrs != null) …
Run Code Online (Sandbox Code Playgroud)

search gmail jakarta-mail

7
推荐指数
1
解决办法
807
查看次数

Kotlin 使用 groupingBy 和聚合求和

tl/dr:Kotlin 如何使用 groupingBy 和聚合来获得(键,数字)对的序列以求和到计数映射?

我有 30gb 的 csv 文件,可以轻松阅读和解析。

File("data").walk().filter { it.isFile }.flatMap { file ->
    println(file.toString())
    file.inputStream().bufferedReader().lineSequence()
}. // now I have lines
Run Code Online (Sandbox Code Playgroud)

每行都是“key,extraStuff,matchCount”

.map { line ->
    val (key, stuff, matchCount) = line.split(",")
    Triple(key, stuff, matchCount.toInt())
}.
Run Code Online (Sandbox Code Playgroud)

我可以过滤“东西”,这很好,因为很多东西都被丢弃了——是的,懒惰的序列。(省略代码)

但是我需要一种懒惰的方法来获得最终的 Map(key:String to count:Int)。

我应该使用 groupingBy 和聚合,因为eachCount()只会计算行数,而不是总结 matchCount,并且 groupingBy 是懒惰的,而 groupBy 不是,但我们已经达到了我的知识范围。

.groupingBy { (key, _, _) ->
    key
}.aggregate { (key, _, matchCount) ->
    ??? something with matchCount ???
}
Run Code Online (Sandbox Code Playgroud)

kotlin

7
推荐指数
1
解决办法
5814
查看次数

这个firebase规则是多余的吗?何时使用write vs validate?

仔细阅读了文档,但我不确定写规则和验证规则部分之间的区别.这个代码是多余的吗?使用其中一个或两者的任何一点?

特别:

  • "验证"说"用户必须登录,并且写入的值必须是uid.
  • "写"权限表示如果值与您的uid匹配,则只能写入$ user_id部分.
{
  "rules": {
    "users": {
      ".validate": "auth != null && newData.val() === auth.uid",
      "$user_id": {
        ".write": "$user_id === auth.uid"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

firebase firebase-authentication

5
推荐指数
1
解决办法
857
查看次数

Kotlin:如何异步等待相同方法的列表?

我有几百个 Java 类实例,它们都需要完成它们的 .calculate() 方法或在 10 分钟内死亡。它们会占用 CPU 和内存,所以我只想一次只允许 5 个(线程?)。我相信我很接近,但是来自 Java 背景我还不够熟悉 kotlin 协程(vs java ExecutorServices)来进行编译。

// ...my logic to create a stream of identical class type instances 
// that all have a vanilla blocking .calculate():Double method...
// which I now want to (maybe?) map to Jobs

listOf(MyClass(1), MyClass(2), MyClass(1000))
.map {
  launch(CommonPool) {
    val errorRate: Double? = it?.calculate()
    println("${it?.javaClass?.simpleName}  $errorRate") // desired output
    errorRate
  }
}
.collect(Collectors.toList<Job>())

jobs.forEach {
    println(it.join())
}
Run Code Online (Sandbox Code Playgroud)

然后我想我需要用非阻塞计算来包装计算?还是阻塞,但超时限制?那个“runBlocking”应该在那里吗?在上面的代码中作为 lambda 更好吗?

fun MyClass.calculateTimeLimited(): Double = …
Run Code Online (Sandbox Code Playgroud)

kotlin

5
推荐指数
2
解决办法
5233
查看次数

Android 上的 PWA:隐藏带有时钟的顶部栏?

我有一个 manifest.json

"display": "fullscreen",
"orientation": "landscape"
Run Code Online (Sandbox Code Playgroud)

但是当从“安装到主屏幕”图标启动时,带有时钟和通知图标的最顶部栏仍然显示。有什么办法可以有真正的全屏选项吗?

chrome 文档说我也可以使用“独立” - 但即使这样,它仍然显示顶部栏。

制作一款沉浸式游戏很难!

progressive-web-apps

5
推荐指数
1
解决办法
1921
查看次数

如何结合 kotlin 委托属性:可观察、可否决和“按地图”?

我正在尝试将delegates/observablevetoable结合起来(在查看源 kotlin.properties.Delegates.kt 后这不是问题),但是在尝试将属性存储在 map 中时事情变得棘手。

或者换句话说,如何将这三者结合起来:

var k1: Int by Delegates.observable(0) { property, oldValue, newValue ->
    println("Hi from k1 observer")
}

var k2:Int by Delegates.vetoable(0) {property, oldValue, newValue ->
    println("Hi from k2 more-than check")
     oldValue > newValue
}

val myMap = mutableMapOf<String, Int>()
var k3 by myMap
Run Code Online (Sandbox Code Playgroud)

delegates kotlin kotlin-delegate

5
推荐指数
1
解决办法
1160
查看次数