kotlin - Kotlin 如何在 kotlin 中使用 java 流 .map() 来映射不同的对象响应
问题描述
我正在尝试将一个对象数组映射到另一个具有不同类型对象的数组,我曾经使用 java 8 中的流来执行此操作,这非常简单,实例化一个对象设置其值并返回该对象。我刚切换到 Kotlin,有时做这种操作会更令人困惑。我找到的所有示例都非常简单,找不到我想要的东西。
我有这个 BalanceMap 类:
data class BalanceMap @JsonCreator constructor(
var balType: String,
var value: Any
)
我正在从 Web 服务获取数据。
val balances: List<AcctBal> = res.getAcctBals();
AcctBal 类看起来像这样
public class AcctBal {
@SerializedName("CurAmt")
@Expose
private CurAmt curAmt;
@SerializedName("Desc")
@Expose
private String desc;
@SerializedName("ExpDt")
@Expose
private LocalDateTime expDt;
}
并尝试将该响应映射到var balanceList: List<BalanceMap>
balances.map {}
-->var balanceList: List<BalanceMap> = balances.map { t -> fun AcctBal.toBalanceMap() = BalanceMap(
balType = "",
value = ""
)}
我想做这样的事情:
List<ProductDetail> details = acctBal.stream().filter(f -> f.getBalType() != null).map(e -> {
String bal = e.getBalType();
if (avalProductInfo.getBankId().equals("00010016")) {
bal = e.getBalType();
}
ProductDetail detail = new ProductDetail();
detail.setItem(bal);
if (e.getCurAmt() != null) {
detail.setValue(e.getCurAmt().getAmt().toString());
} else if (e.getRelationDt() != null) {
detail.setValue(e.getRelationDt().toGregorianCalendar().getTimeInMillis());
} else if (e.getMemo() != null) {
detail.setValue(e.getMemo());
}
return detail;
}).collect(toList());
我一直在尝试,但总是错的,任何帮助将不胜感激。快乐编码!
解决方案
一些快速原型
details = acctBal
.filter{ f -> f.getBalType() != null }
.map { it -> mapToProductDetail (it) }
你可以看看这里
推荐阅读
- docker - 如何在 Docker 上使用 Geckodriver .Net 内核运行 Selenium
- openedge - 数据被 CSV 文件覆盖
- python - 以特定顺序在同一个线程中运行多个函数
- flutter - GestureDetector 在 IgnorePointer 下不起作用
- javascript - 递归地记录dom中所有孩子的所有孩子
- vue.js - Vue组件的CSS样式程序
- azure-devops-server-2019 - Kony 与 Azure DevOps Server 2019 的集成
- java - 弹出菜单未在锚视图android上设置
- python - Pygame 问题 - 功能正常,但视觉效果不行
- arrays - 在CUDA中将十六进制数组转换为char数组