LoginSignup
6
8

More than 5 years have passed since last update.

Java初心者向け: List,Map,Iterator/配列...どうやって変換すればいいの?

Last updated at Posted at 2017-06-12

Javaでプログラミングする際、研修でも研修以外でも
List,Mapなどはよく(たまにSet,Iteratorなど)登場すると思います。

が、久しぶりに変換するものは
「あれ?これどうやって変換するんだっけ」となることもあるはずなので

1.とりあえず早見表

クラス名があるものはstaticメソッド、メソッド名のみのものはインスタンスメソッド

\変換先
変換元\
List・Setなど(Collection) Map Iterator Stream 配列
List/Setなど
(Collection)
コンストラクタ - iterator() stream() toAttay()
Map entrySet(), keySet(), values() コンストラクタ (Setを経由する) (Setを経由する) (Setを経由する)
Stream Collect() Collect() iterator() 中間操作全般 toArray()
配列 (Listのみ)
Arrays.asList()
- (Listを経由する) Steam.of() Arrays.copyOfRange()

※java9以降はList.of(), Set.of()

2.大事なところだけ解説

・Collection(List/Setなど)→Collection(List/Setなど)

Javaの組み込みCollectionクラス(ArrayList,HashSet,ArrayDequeなど)は
コンストラクタにCollectionを入れるものがあります。
MapはCollectionではありませんが、Map→Mapも同様のことができます。

Collection.java
 //Setを事前に用意する
 Set<String> ESet = Set.of("list","set","deque");
 //SetをListに!
 List<String> EList = new ArrayList(Eset);

※null許容のクラス→不許容のクラスに変換する場合などは例外に注意!

・Map→Collection,Iterator

Key一覧だけほしい場合はkeySet,中身だけほしい場合はvalues()とします。
for文で両方使用する処理をしたい場合はentrySet()

Map.java
 //Mapを事前に用意する
 Map<String,Collection<String>> EMap = new HashMap<>();
 EMap.put("list",List.of("list"));
 EMap.put("set",Set.of("set"));

 //MapをSetに!
 Set<String> ESet = EMap.keySet();
 //SetをIteratorに!
 ESet.iterator();

 //つなげてMap→Iteratorも可
 EMap.keySet().iterator();

・List→配列への変換

List.java
 List<String> EList = List.of("list","set","deque");
 String[] EArray = EList.toArray(new String[0]);

※引数に配列を入れないと Object[] になってしまうので注意!

3.やや時間のある人向け:特殊なCollectionに変換したい...Streamを使って変換

Streamからはcollect()を使用することでCollectionにすることができます。
(配列やMapなど、Collection以外にすることも可能)
特に、Collectors.toCollectionを利用することでほとんどあらゆるCollectionを簡単に作成できます。

・組込Collectorを使った変換

Set.java
 List<String> EList = List.of("list","set","deque");
 //Setに変換する
 Set<String> ESet = EList.stream().collect(Collectors.toSet());

注意:Collectors.toSet(),Collectors.toList()は変更可能か不可能かも保証されていないので注意!
(例:toListは現状ArrayListだが、いきなり変更不可能なListにされる可能性あり)

Map.java
 List<Integer> EList = List.of(1,2,3);
 //リストの要素をkeyに、文字列化したものをvalueに設定するMapに変換する
 Map<Integer,String> EMap = EList.stream().collect(Collectors.toMap(Function.identity(), String::valueOf));

・Collectors.toCollectionを使った変換

LinkedList.java
 List<Integer> EList = List.of(1,2,3);
 //Listの実装クラスを指定したい場合などは、toCollectionを使う
 LinkedList<Integer> EList = EList.stream().collect(Collectors.toCollection(LinkedList::new));
6
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8