【发布时间】:2021-04-06 18:55:28
【问题描述】:
我正在尝试根据其他两个列表生成一个名为 selectedBooks 的列表:
这是第一个列表:
List<Book> availableBooks = [
Book(
id: 1,
isActive: false,
name: "Tipo 1"
),
Book(
id: 2,
isActive: false,
name: "Tipo 2"
),
Book(
id: 3,
isActive: false,
name: "Tipo 3"
),
Book(
id: 4,
isActive: false,
name: "Tipo 4"
),
]
这是第二个列表:
List<Book> allowedBooks = [
Book(
id: 1,
isActive: true,
name: "Tipo 1"
),
Book(
id: 3,
isActive: true,
name: "Tipo 3"
),
]
这是我要生成的列表:
selectedBooks = availableBooks
.map((book) =>
allowedBooks.contains(book.id)
? Book(
id: book.id,
isActive: true,
name: book.name)
: Book(
id: book.id,
isActive: false,
name: book.name))
.toList();
由于 allowedBooks 确实包含 id 1 和 3,我希望 selectedBooks 是:
List<Book> selectedBooks = [
Book(
id: 1,
isActive: true,
name: "Tipo 1"
),
Book(
id: 2,
isActive: false,
name: "Tipo 2"
),
Book(
id: 3,
isActive: true,
name: "Tipo 3"
),
Book(
id: 4,
isActive: false,
name: "Tipo 4"
),
]
但是,这不起作用,因为 selectedBooks 最终将所有 book.isActive 设置为 false。
我认为在此处包括的情况下,有些东西没有按预期工作:
selectedBooks = availableBooks
.map((book) =>
allowedBooks.contains(book.id) ? ...
有什么线索吗?非常感谢。
【问题讨论】:
-
您在
Book类中是否覆盖了operator==? contains 方法使用它 -
嗨@pskink,不,它没有被覆盖。
-
@pskink 我在其他地方使用了运算符 ==,所以我认为我不应该覆盖它。在你看来,我可以改变条件以不同的方式达到结果吗?