つまり、このコードがあり、条件とラムダを使用して配列の特定の要素を取得したいと思います。コードは次のようになります。
Preset[] presets = presetDALC.getList();
Preset preset = Arrays.stream(presets).select(x -> x.getName().equals("MyString"));
しかし、明らかにこれは機能しません。 C#では似たようなものになりますが、Javaではどうすればいいですか?
このようにできます
Optional<Preset> optional = Arrays.stream(presets)
.filter(x -> "MyString".equals(x.getName()))
.findFirst();
if(optional.isPresent()) {//Check whether optional has element you are looking for
Preset p = optional.get();//get it from optional
}
Optional
here の詳細を読むことができます。
このような:
_Optional<Preset> preset = Arrays
.stream(presets)
.filter(x -> x.getName().equals("MyString"))
.findFirst();
_
これは、値を含む場合と含まない場合がある Optional
を返します。 Optional
を完全に削除する場合:
_Preset preset = Arrays
.stream(presets)
.filter(x -> x.getName().equals("MyString"))
.findFirst()
.orElse(null);
_
filter()
操作は、遅延ストリームを返す中間操作であるため、一致が検出された後でも配列全体がフィルターされることを心配する必要はありません。
最初に一致させますか、それともすべて一致させますか?
String[] presets = {"A", "B", "C", "D", "CA"};
// Find all matching
List<String> resultList = Arrays.stream(presets)
.filter(x -> x.startsWith("C"))
.collect(Collectors.toList());
System.out.println(resultList);
// Find first matching
String firstResult = Arrays.stream(presets)
.filter(x -> x.startsWith("C"))
.findFirst()
.orElse(null);
System.out.println(firstResult);
出力
[C, CA]
C