JavaでMapから指定した範囲の要素を取得する方法について記載します。
指定した範囲の要素を取得する方法
NavigableMap の subMap メソッドを使用します。
構文1( fromKey, toKey の値を含まない場合。 from < x < to )
submap( fromKey, false, toKey, false )
構文2( fromKey, toKey の値を含む場合。 from <= x <= to )
submap( fromKey, true, toKey, true )
第2・4 引数の値で < や <= を指定できます。
true( <= )、false( < )
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
NavigableMap<Integer,String> map = new TreeMap<>(); map.put(1, "one"); map.put(2, "two"); map.put(3, "three"); map.put(4, "four"); map.put(5, "five"); // 1 < x < 5 NavigableMap<Integer,String> resultMap1 = map.subMap(1, false, 5, false); System.out.println(resultMap1); // {2=two, 3=three, 4=four} // 1 <= x <= 5 NavigableMap<Integer,String> resultMap2 = map.subMap(1, true, 5, true); System.out.println(resultMap2); // {1=one, 2=two, 3=three, 4=four, 5=five} |
また、subMap には、引数が2つだけのものもあります。
構文3( from <= x < to )
submap( fromKey, toKey )
この場合、少々分かりづらいですが、from のみ指定した値を含む 動作になります。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
NavigableMap<Integer,String> map = new TreeMap<>(); map.put(1, "one"); map.put(2, "two"); map.put(3, "three"); map.put(4, "four"); map.put(5, "five"); // 1 <= x < 5 NavigableMap<Integer,String> resultMap3 = (NavigableMap<Integer, String>) map.subMap(1, 5); System.out.println(resultMap3); // {1=one, 2=two, 3=three, 4=four} // 以下の方法でも同じ結果になります NavigableMap<Integer,String> resultMap4 = map.subMap(1, true, 5, false); System.out.println(resultMap4); // {1=one, 2=two, 3=three, 4=four} |
個人的には
subMap( fromKey, toKey )
より
subMap( fromKey, boolean, toKey, boolean )
の方が、比較演算子( < , <= )を明示的に指定できてソースが読みやすいと感じます。