ホームページ  >  記事  >  Java  >  Java で Stream を使用して if の多すぎる条件の判定を最適化する方法

Java で Stream を使用して if の多すぎる条件の判定を最適化する方法

王林
王林転載
2023-05-05 10:40:062282ブラウズ

if で多すぎる判定条件を Stream で最適化する

Jdk1.8 新機能 Stream ストリームには、anyMatch、allMatch、noneMatch の 3 つの API があり、それぞれの機能は次のとおりです。

  • anyMatch: いずれかの条件が条件を満たす場合は true が返されます;

  • allMatch: すべての条件が条件を満たす場合は trueが返される;

  • noneMatch: どの判定条件も条件を満たさない場合はtrueを返す;

実際の使い方はVery simple:

List<String> list = Arrays.asList("a", "b", "c","d", "");
//任意一个字符串判断不为空则为true
boolean anyMatch = list.stream().anyMatch( s->StringUtils.isEmpty(s));
//所有字符串判断都不为空则为true
boolean allMatch = list.stream().allMatch( s->StringUtils.isEmpty(s));
//没有一个字符判断为空则为true
boolean noneMatch = list.stream().noneMatch( s->StringUtils.isEmpty(s));

以上の 3 つの実装方法により、if の判定条件が多すぎる状況をある程度最適化できることがわかります。その最適化を使用しますか?

日常の実際の開発では、このような多数の判定条件を備えたコードを目にしたことがあると思います。

 if(StringUtils.isEmpty(str1) || StringUtils.isEmpty(str2) ||
    StringUtils.isEmpty(str3) || StringUtils.isEmpty(str4) ||
    StringUtils.isEmpty(str5) || StringUtils.isEmpty(str6)
   ){
 .....
}

このとき、ストリーム フローを使用して最適化することを検討できます。最適化されたコードは次のとおりです。次のとおりです:

if(Stream.of(str1, str2, str3, str4,str5,str6).anyMatch(s->StringUtils.isEmpty(s))){
 .....
 }

このように最適化すると、多数の if に条件を積み上げたものよりもエレガントになりますか?

もちろん、これは or 条件のみに当てはまります。and 条件に遭遇した場合は、たとえば:

if(StringUtils.isEmpty(str1) && StringUtils.isEmpty(str2) &&
   StringUtils.isEmpty(str3) && StringUtils.isEmpty(str4) &&
   StringUtils.isEmpty(str5) && StringUtils.isEmpty(str6)
){
   .....
}

Stream を使用して最適化した後:

if(Stream.of(str1, str2, str3, str4,str5,str6).allMatch(s->StringUtils.isEmpty(s))){
  .....
}
など、Stream を使用して最適化することもできます。

以上がJava で Stream を使用して if の多すぎる条件の判定を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。