Flutterでは、リストデータを操作するためにさまざまなメソッドが提供されています。その中でも .map
と .filter
は非常によく使われるメソッドであり、それぞれ異なる目的に利用されます。
この記事では、.map
と .filter
を比較し、それぞれの特徴や適した使用ケースについて探ってみましょう。
1. .mapメソッド: 変換の力強いツール
.mapメソッドは、リスト内の各要素に対して指定された関数を適用し、その結果を新しいリストとして返します。これは、リストの各要素を変換したい場合に非常に便利です。例えば、数値のリストを2倍にする場合は次のようになります。
List<int> numbers = [1, 2, 3, 4, 5];
List<int> doubledNumbers = numbers.map((number) => number * 2).toList();
print(doubledNumbers); // [2, 4, 6, 8, 10]
.mapメソッドは変換に特化しており、元のリストと同じ要素数の新しいリストを生成します。
2. .filterメソッド: データを絞り込む鋭い刃
.filterメソッドは、リスト内の要素を特定の条件に基づいて絞り込むために使用されます。これは、条件を満たす要素だけを残すことができ、余計なデータを排除するのに適しています。例えば、奇数だけを残す場合は次のようになります。
List<int> numbers = [1, 2, 3, 4, 5];
List<int> oddNumbers = numbers.where((number) => number % 2 != 0).toList();
print(oddNumbers); // [1, 3, 5]
.filterメソッドは条件に基づいてデータを絞り込む強力な手段を提供します。
3. どちらを使うべきか?
- .mapメソッドの適したケース:
- データの変換が主な目的の場合。
- 各要素を同じ方法で変換する必要がある場合。
List<int> numbers = [1, 2, 3, 4, 5];
List<int> squaredNumbers = numbers.map((number) => number * number).toList();
print(squaredNumbers); // [1, 4, 9, 16, 25]
- .filterメソッドの適したケース:
- 特定の条件に基づいてデータを抽出したい場合。
- リスト内の不要な要素を取り除く必要がある場合。
List<int> numbers = [1, 2, 3, 4, 5];
List<int> evenNumbers = numbers.where((number) => number % 2 == 0).toList();
print(evenNumbers); // [2, 4]
4. チェインして使うことも可能
両方のメソッドはチェインして使用することができ、リスト処理をより洗練させることができます。例えば、奇数を抽出してから2倍する場合:
List<int> numbers = [1, 2, 3, 4, 5];
List<int> doubledOddNumbers = numbers.where((number) => number % 2 != 0).map((number) => number * 2).toList();
print(doubledOddNumbers); // [2, 6, 10]
まとめ
.mapと.filterは、Flutterのリスト操作において非常に役立つツールです。どちらを使うかは、プロジェクトの要件によりますが、変換が主な目的であれば.map、データの絞り込みが主な目的であれば.filterを選ぶと良いでしょう。また、両方を組み合わせて使用することで、より柔軟かつ効果的なリスト処理を実現することができます。