:
A: B
B: C
C: D
D: E
、潜在的に第二の独立したチェーン:
Map<String, String> sequences = new HashMap<>();
String input = "A->B";
String[] parts = input.split("->"); // Split input in two parts
sequences.put(parts[0], parts[1]);
このマップは、最終的に次のようになります
G: F
H: G
ここで、各チェーンの開始位置を見つける必要があります。このマップでは、一度も値として使用されていないキーを探すことでチェーンの開始点を見つけることができます。
これは実行して行うことができます。今すぐ
// make a copy of all keys
Set<String> chainStarters = new HashSet<>(sequences.keySet());
// remove all keys that are also used as a value
chainStarters.removeAll(sequences.values());
chainStarters
は、各鎖の開始が含まれています。上記の場合、それはA
とH
になります。
ここで残されているのは、のキーから始まるsequences
マップの各値を順番に調べて、それからストリングを作成することです。次のようなものがあります。
String currentKey = startKey; // 'A' for example
StringBuilder sb = new StringBuider(startKey);
while(sequences.containsKey(currentKey)) {
currentKey = sequences.get(currentKey);
sb.append("->").append(currentKey);
}
System.out.println(sb.toString());
質問はあまり明確ではありません。これらの番号付きのパケットか何か?ストリームはどのように見えますか? – john16384
入力は文字列のリスト、 "A-> B"、 "C-> D"などです。リストのすべての要素が最初にある場合、それらからリンクリストを作成する必要があります。 2番目のシナリオでは、リストはストリームとして来ていますが、最初はリスト内のすべての要素を持っていないので、ストリームから次の文字列を取得するときに、 – bbshaw