我试图将一个对象数组映射到另一个具有不同类型对象的数组,我曾经使用 java 8 中的流来做到这一点,它非常简单,实例化一个对象,设置其值并返回该对象。我刚刚切换到 Kotlin,有时做这种操作确实更令人困惑。我找到的所有示例都非常简单,找不到我想要的东西。

我有这个 BalanceMap 类:
data class BalanceMap @JsonCreator constructor( var balType: String, var value: Any)
我正在从网络服务获取数据。

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());

我一直在试验,但总是错的,任何帮助将不胜感激。快乐编码!

最佳答案

一些快速原型(prototype)制作

    details  = acctBal
                     .filter{ f -> f.getBalType() != null }
                     .map { it -> mapToProductDetail (it) }
你可以看看here

10-06 10:06