文字列はリストから項目のいずれかが含まれている場合、JAVAは、最長の値を返します

ザックFST:

私は、コードタイプの次の配列を持っています:

["sample_code","code","formal_code"]

そして、次のIDS:

String id="123456789_sample_code_xyz";
String id2="91343486_code_zxy";

私は、IDSからコードタイプを抽出したいです

これは私のコードスニペットです:

    String codeTypes[] = {"sample_code","code","formal_code"};
    String id= "123456789_sample_code_xyz";
    String codeType = Arrays.stream(codeTypes).parallel().filter(id::contains).findAny().get();
    System.out.println(codeType);

それは代わりに「sample_code」の「コード」を返すため、私は最も長いコードタイプを取得したい、第一のIDで作業をdoesntの。

for the 1st id the code type should be "sample_code"
for the 2nd id the code type should be "code"
オレVV:

最初の最長コードの種類を確認してください。これはあなたのコードに次の変更を意味します。

  1. 長下降によってコードタイプを並べ替えます。
  2. 並列ストリームを使用しないでください。パラレルストリームは、順序を持っていません。順次ストリームは、コードタイプが順にチェックされているを確認します。
  3. 使用findFirst()ではなく、findAny()あなたが最初の試合を得ることを確認します。

だから、次のようになります。

    String codeTypes[] = { "sample_code", "code", "formal_code" };
    Arrays.sort(codeTypes, Comparator.comparing(String::length).reversed());

    String id = "123456789_sample_code_xyz";
    Optional<String> codeType = Arrays.stream(codeTypes).filter(id::contains).findFirst();
    codeType.ifPresent(System.out::println);

今、出力は次のようになります。

sample_code

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=4888&siteId=1