文字列でもなんでも良いのだが、"a","b","c"... リストの順序に従った「ペア」を順序にしたがって作りたい要求があったとする。
"a" と "b"
"b" と "c"
"c" と "d"
のように順にペアを作る。ペアは、AbstractMap.SimpleEntry を継承したクラスとする。
public class Pair<K, V> extends AbstractMap.SimpleEntry<K, V> implements Serializable{ public Pair(final K key, final V value){ super(key, value); } }
以下リストに対して Pairのリストを作るのが目的
List<String> list = Arrays.asList("a","b","c","d","e","f","g","h");
これから作るのに悩んだあげく ListIterator を使用し最初のイテレータを2番目に置く方法だ。
リストが1個しかない時は、作らない。ListIteratorだから、空リストは処理できない。
List<Pair> plist = new ArrayList<>(); for(ListIterator<String> it=list.listIterator(1);it.hasNext();){ plist.add(new Pair<String, String>(list.get(it.nextIndex()-1), it.next())); } plist.stream().forEach(p->{ System.out.println( "key=" + p.getKey() + " value=" + p.getValue() ); });
結果は println の結果はこうなる。
key=a value=b key=b value=c key=c value=d key=d value=e key=e value=f key=f value=g key=g value=h
もっと良い方法があればいいのに。