标签: kotlin

Kotlin 将 List<Triple<String, String, String> 变异为 Triple<List<String>, List<String>, List<String>> 的优雅方式

我想尽可能简洁地(但清楚地)将 a 转换List<Triple<String, String, String>为 a Triple<List<String>, List<String>, List<String>>

例如,假设执行转换的方法被调用turnOver,我希望:

val matches = listOf(
  Triple("a", "1", "foo"),
  Triple("b", "2", "bar"),
  Triple("c", "3", "baz"),
  Triple("d", "4", "qux")
)
val expected = Triple(
  listOf("a", "b", "c", "d"),
  listOf("1", "2", "3", "4"),
  listOf("foo", "bar", "baz", "qux")
)
matches.turnOver() == expected // true
Run Code Online (Sandbox Code Playgroud)

如何编写简洁、清晰且可能具有turnOver功能性的函数?

可以使用 Arrow-Kt,我已经将其作为项目依赖项。

monads functional-programming monad-transformers kotlin arrow-kt

3
推荐指数
1
解决办法
452
查看次数

如何在调用方法中检查 Kotlin 协程 job.isActive

我正在尝试使用 Kotlin 协程而不是传统的 Java 线程来执行后台操作:

我从这个链接中了解到,它工作正常

val job = launch {
    for(file in files) {
        ensureActive() //will throw cancelled exception to interrupt the execution
        readFile(file)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的情况是我有一个非常复杂的 readFile() 调用函数,我如何检查该函数内的作业是否处于活动状态?

val job = launch {
    for(file in files) {
        ensureActive() //will throw cancelled exception to interrupt the execution
        complexFunOfReadingFile(file) //may process each line of the file
    }
}
Run Code Online (Sandbox Code Playgroud)

我不想在此协程范围内复制函数的 impl 或将作业实例作为参数传递给该函数。处理此案的官方方式是什么?

非常感谢。

android kotlin kotlin-coroutines

3
推荐指数
1
解决办法
1681
查看次数

未解决的参考:引擎(WallpaperService)

我正在尝试android.service.wallpaper.WallpaperService.Engine在 Kotlin 中扩展类,但出现“未解析的引用”错误:

未解决的参考:引擎

即使它在上面显然是导入的。

有没有什么办法解决这一问题?

android kotlin android-studio

3
推荐指数
1
解决办法
123
查看次数

Spring JDBC - BeanPropertyRowMapper 与 Kotlin

概述: 该应用程序处理用户信息的基本 CRUD 功能。

问题: 从预先填充的 H2 数据库读取用户详细信息时,我在使用BeanPropertyRowMapper. 映射器无法初始化 User 实例,因为它无法使用数据类的默认构造函数。

数据类:

在此处输入图片说明

存储库:

在此处输入图片说明

错误:

Caused by: java.lang.IllegalArgumentException: No argument provided for a required parameter: parameter #0 id of fun <init>(kotlin.String, kotlin.String, kotlin.String, kotlin.String, java.util.Date): org.chrysalis.userservice.model.User
Run Code Online (Sandbox Code Playgroud)

提供特定的行映射器可以解决该问题,但我很困惑为什么BeanPropertyRowMapper无法创建响应。

在此处输入图片说明 我还想知道这个问题是否只特定于 Java 反射,以及这对于 spring 中的其他映射实用程序是否相同。

spring-jdbc kotlin

3
推荐指数
1
解决办法
489
查看次数

如何使用材料设计选择时间?

如何使用材料选择时间:1.3.0-alpha01,我正在寻找以下屏幕截图的时间选择器,这是我在材料io中找到的。

我试过日期选择器正在工作 材料时间选择器

物料日期选择器

//Creating a MaterialDatePicker.Builder instance that gives us a single date selector.
val builder : MaterialDatePicker.Builder<*> = MaterialDatePicker.Builder.datePicker() // 1
//Building-up the MaterialDatePicker by calling a builder.build function
val picker : MaterialDatePicker<*> = builder.build()  // 2
//Display the Material Date Picker.
picker.show(requireActivity().supportFragmentManager, picker.toString())   // 3
Run Code Online (Sandbox Code Playgroud)

简单的时间选择器

  val cal = Calendar.getInstance()
            val timeSetListener = TimePickerDialog.OnTimeSetListener { _, hour, minute ->
                cal.set(Calendar.HOUR_OF_DAY, hour)
                cal.set(Calendar.MINUTE, minute)
                //textView.text = SimpleDateFormat("HH:mm").format(cal.time)
            }
            val time = TimePickerDialog(context, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true)
            time.setTitle("")
            time.show()
Run Code Online (Sandbox Code Playgroud)

android kotlin android-timepicker material-design material-components-android

3
推荐指数
2
解决办法
6015
查看次数

如何在 micronaut 中使用特定于环境的变量?

我是 micronaut 和服务器端编程的新手。不幸的是,micronaut 文档对我来说没有多大意义,因为我没有 Java 背景。很多像“ApplicationContext”这样的术语在英语中是有意义的,但我不知道如何在实践中使用它们。

尝试从一个非常基本的应用程序开始,该应用程序根据其所处的环境打印不同的配置(“localhost”、“dev”、“prod”)。

这是我的控制器

@Controller("/")
class EnvironmentController {

    // this should return "localhost", "DEV", "PROD" depending on the environment
    @Get("/env")
    @Produces(MediaType.TEXT_PLAIN)
    fun env() = "???" // what should I put here ?

    // this should return the correct mongodb connection string for the environment
    @Get("/mongo")
    @Produces(MediaType.TEXT_PLAIN)
    fun mongo() = "???" // what should I put here ?
}
Run Code Online (Sandbox Code Playgroud)

这是application.yml. 理想情况下,每个环境都有 1 个 yml 文件

micronaut:
  application:
    name: myApp
  server:
    port: 8090

environment: localhost

mongodb: …
Run Code Online (Sandbox Code Playgroud)

kotlin micronaut

3
推荐指数
1
解决办法
3811
查看次数

Android Studio Kotlin - 如何在文本中显示 2 位数字?

在 Android Studio Kotlin 中创建计时器。

我想显示时间值,因为它是 2 位数字,如“01:04:07”。

请参阅以下内容。

在此处输入图片说明

在此处输入图片说明

此时,我该如何更改代码?

android kotlin android-studio

3
推荐指数
2
解决办法
794
查看次数

Kotlin - 如何连接两张地图?

我有两个不可变的地图,例如:

val a = mapOf("a" to 1, "z" to 1)
val b = mapOf("b" to 1, "a" to 1, "c" to 1)
Run Code Online (Sandbox Code Playgroud)

有没有什么优雅的方法来连接这些地图并拥有一个包含所有键的地图?如果它有重复的键,我想用 B 映射中的值替换它。

结果应该类似于:

mapOf("z" to 1, "b" to 1, "a" to 1, "c" to 1)
Run Code Online (Sandbox Code Playgroud)

kotlin

3
推荐指数
1
解决办法
1253
查看次数

如何从android中的URL下载文件?

从 url 下载文件的最佳方法是什么?我尝试使用下载管理器。但我无法理解如何获取下载文件的 Uri。这是我的代码:

   file?.let {
            val uri = Uri.parse(it)
            val downloadManager = getSystemService<Any>(Context.DOWNLOAD_SERVICE) as DownloadManager?
            val request = DownloadManager.Request(uri)
            request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or
                    DownloadManager.Request.NETWORK_MOBILE)
            request.allowScanningByMediaScanner()
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "downloadfileName")
            request.setMimeType("*/*")
            downloadManager?.enqueue(request)
        }
Run Code Online (Sandbox Code Playgroud)

也许今天有更好的方法来下载文件并获取 Uri。请帮我

android uri kotlin android-download-manager

3
推荐指数
2
解决办法
5120
查看次数

Fragment Android Kotlin 中的DataBinding+ViewModel

我是 DataBinding 的新手。我想在 Fragment 中使用 ViewModel 和 DataBinding。当我在 Activity 中使用时,它可以工作,但在 Fragment 中不起作用。请帮助使用数据绑定获取编辑文本内容。先感谢您。主活动.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        supportFragmentManager.beginTransaction().add(R.id.main,BlankFragment()).commit()

    }
}
Run Code Online (Sandbox Code Playgroud)

活动.main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/main"
    tools:context=".MainActivity">

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

空白片段.kt

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import com.resocoder.databinding.databinding.FragmentBlankBinding

class BlankFragment : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        val binding: FragmentBlankBinding = DataBindingUtil.inflate(inflater,
                R.layout.fragment_blank, container, …
Run Code Online (Sandbox Code Playgroud)

data-binding android fragment kotlin android-databinding

3
推荐指数
1
解决办法
6026
查看次数