読者です 読者をやめる 読者になる 読者になる

リストから順序を維持した Pair を作成する

文字列でもなんでも良いのだが、"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

もっと良い方法があればいいのに。