Integer
キーと値を持つマップがあります。この特定の形式でString
に変換する必要があります:key1 - val1, key2 - val2, key3 - val3
。今、私はforEach
を使用して各要素をフォーマットし、それらをリストに収集してからString.join();を実行しています。
List<String> ships = new ArrayList<>(4);
for (Map.Entry<Integer, Integer> entry : damagedMap.entrySet())
{
ships.add(entry.getKey() + " - " + entry.getValue());
}
result = String.join(",", ships);
それを行う短い方法はありますか?そして、ラムダを使用するのは良いことです。ラムダを使用する練習が必要だからです。
次のようなものを探していると思います:
_import Java.util.*;
import Java.util.stream.*;
public class Test {
public static void main(String[] args) throws Exception {
Map<Integer, String> map = new HashMap<>();
map.put(1, "foo");
map.put(2, "bar");
map.put(3, "baz");
String result = map.entrySet()
.stream()
.map(entry -> entry.getKey() + " - " + entry.getValue())
.collect(Collectors.joining(", "));
System.out.println(result);
}
}
_
ビットを順番に確認するには:
entrySet()
は、反復可能なエントリのシーケンスを取得しますstream()
はその反復可能のストリームを作成しますmap()
は、エントリのストリームを「キー-値」形式の文字列のストリームに変換しますcollect(Collectors.joining(", "))
は、_", "
_を区切り文字として使用して、ストリーム内のすべてのエントリを単一の文字列に結合します。 _Collectors.joining
_ は、 Collector
を返すメソッドです。このメソッドは、文字列の入力シーケンスに対して機能し、単一の文字列の結果を返します。HashMap
は順序付けされていないため、順序はここで保証されていることに注意してくださいnot。 TreeMap
を使用して、キーの順序で値を取得できます。