java 8使用list实例更改列表以进行映射

时间:2016-03-30 17:30:37

标签: java java-8 java-stream

我尝试使用Collectors.toMap调用将列表转换为地图。该列表由ActivityReconcile个对象组成。我想将列表中每个条目的实例传递给toMap调用。

代码在下面,我需要实例的地方用??。

表示
final List<ActivityReconcile> activePostedList = loader.loadActivePosted(accessToken);
Map<AccountTransactionKey, ActivityReconcile> postedActiveMap = 
activePostedList.stream().collect(
 Collectors.toMap(
 AccountTransactionKey.createNewAccountTransactionKeyFromActivityReconcileRecord(??),??));

2 个答案:

答案 0 :(得分:4)

如果我理解正确,你需要像

这样的东西
Map<AccountTransactionKey, ActivityReconcile> result = choices
              .stream()
              .collect(Collectors.toMap(
                      AccountTransactionKey::generate,
                      Function.identity()));

方法(在AccountTransactionKey类中)看起来像

public static AccountTransactionKey generate(ActivityReconcile reconcile) {...}

我已将createNewAccountTransactionKeyFromActivityReconcileRec替换为generate,以使答案更具可读性和易懂性。

答案 1 :(得分:3)

要使用最少的更改“修复”代码,请添加lambda参数:

activePostedList.stream().collect(Collectors.toMap(
  ar -> AccountTransactionKey.createNewAccountTransactionKeyFromActivityReconcileRecord(ar)),
  o -> o));

或使用方法参考:

activePostedList.stream().collect(Collectors.toMap(
  AccountTransactionKey::createNewAccountTransactionKeyFromActivityReconcileRecord, o -> o));

顺便说一句,我记不起只要createNewAccountTransactionKeyFromActivityReconcileRecord看到一个方法名称 - 为了便于阅读,请考虑将其减少到create(),因为返回类型和参数类型足以区分它来自您可能拥有的其他工厂方法。