これは、Java Streamsを使用して1行でこの問題を解決することが可能である場合、私は疑問に思って:私は、文字列のリストで文字列を検索し、検索文字列(見つかった場合は)新しいリストの最初の文字列になり、別のリストを作成する必要があります[文字列値の残りの部分
例:の場合:
List<String> oldList = Arrays.asList("Avacado", "Apple", "Orange", "Chocolate");
だから今、検索フィルタ「チョコレート」を言う使用している場合ならば、そのは順番に「チョコレート」、「Avacado」、「アップル」、「オレンジ」の要素を含む新しいリストを返す必要があります。
List<String> newList = oldList.stream().filter(i -> i.equals("Chocolate")).collect(Collectors.toList()) ???
あなたは使用してソリューションを求めていますStream
。これは、1つです。
List<String> sorted = oldList.stream()
.sorted(Comparator.comparing("Chocolate"::equals).reversed())
.collect(Collectors.toList());
System.out.println(sorted);
そして、それは与えます:
[Chocolate, Avacado, Apple, Orange]
だから、唯一の"Chocolate"
最初のインデックスで移動させました。
しかし、実際にはヨン必要はありませんStream
。リスト自体は十分です。
oldList.sort(Comparator.comparing("Chocolate"::equals).reversed());
System.out.println(oldList);
結果は
[Chocolate, Avacado, Apple, Orange]
... 同じ。
EDIT:
@Holgerは、それが契約に違反したと指摘したように、私は私の答えを更新しましたComparator.compare(o1,o2)
。私はホルガーが彼のコメントで提案された解決策を使用しています。私は、正しい解決策を得るために2回苦労ように、彼はupvotedされなければなりません。
このアプローチは、各文字列をマッピングするboolean
文字列がに等しいかどうかを述べ値"Chocolate"
。平等の場合はBoolean.compare(x,y)
戻ります1
用x
と-1
するためにy
他の文字列が等しくない場合"Chocolate"
。場合x
とy
されているに等しい"Chocolate"
結果です0
。
私たちが移動するとして"Chocolate"
最初のインデックスには、インデックスが減少しています。従って(reveresedコンパレータ1
=> -1
および-1
=> 1
)が必要です。