【发布时间】:2020-03-11 12:59:50
【问题描述】:
我想创建一个新列表,其中仅包含输入列表中满足以下要求的交易:名称和代码应多次出现在输入列表中。 (参见示例。)项目和 ID 不相关。
输入列表
List<Transactions> transactionsList;
+----+------+----+-------+
| id | name |code| item |
+----+------+----+-------+
| 1 | john | A1 | shoes |
| 2 | john | A1 | shirt |
| 3 | anon | A2 | shoes |
| 4 | anon | A2 | shoes |
| 5 |nymous| A3 | tie |
+----+------+----+-------+
预期结果
+----+------+----+-------+
| id | name |code| item |
+----+------+----+-------+
| 1 | john | A1 | shoes |
| 2 | john | A1 | shirt |
| 3 | anon | A2 | shoes |
| 4 | anon | A2 | shoes |
+----+------+----+-------+
我试过使用这个代码
List<Transactions> filteredTransactionList = new ArrayList<>();
for(Transactions transaction : transactionList){
if (transactionList.stream().anyMatch(f ->
f.getName().equals(transaction .getName())) &&
transactionList.stream().anyMatch(f -> f.getCode().equals(transaction .getCode())) ) {
filteredTransactionList.add(transaction );
}
}
但似乎这段代码不起作用,因为当它发现自己在列表中时,if 条件将始终为真
如果可能的话,有什么方法可以在不使用 .stream 的情况下实现它? 有人说我可以使用地图来实现它,但我找不到这样做的方法。如果没有其他选择,使用任何东西都可以。
我必须为我的另一个 if() 函数保留 for 循环。
【问题讨论】: