Javaの8ストリーム・ロジック上の必要性のヘルプ

スレシュ:

私は、複数の文字列を含む配列リストを持っています。私はいくつかの条件に基づいて更新された値とそのリスト内の項目のいずれかを交換し、他の文字列を保持する必要があります。私は、Java 8の方法をやってで助けを必要としています。

コードサンプル:

String newPONumber = "Orig PO#: 22222222222222456";
List<String> existingMessages = Arrays.asList("Orig PO#: 2222222222222222    ", "this is a sample string     ");
List<String> updatedMessages =  new ArrayList<>();
System.out.println("Existing Messages");
existingMessages.stream().forEach(System.out::println);


//Java 8's way that I tried but losing the existing messages since filter is used
updatedMessages = existingMessages.stream()
        .filter(message -> message != null)
        .map(String :: trim)
        .map(String:: toUpperCase)
        .filter(message -> message.startsWith("ORIG"))
        .map(message -> newPONumber)
        .collect(Collectors.toList());

System.out.println("New Messages");
updatedMessages.stream().forEach(System.out::println);

出力には、すべてのメッセージに加えて、更新ORIG POの#文字列が含まれている必要があります

//"Orig PO#: 2222222222222456", "this is a sample string"

ループ道のための伝統的な

for(String message : existingMessages) {
    message = message.trim();
    if(message.startsWith("ORIG")) {
        message = newPONumber;
    }
    updatedMessages.add(message);                   
} 
また:

それを行う1つの方法は次のようになります

List<String> updatedMessages = existingMessages.stream()
        .filter(Objects::nonNull)
        .map(String::trim)
        .map(message -> message.toUpperCase().startsWith("ORIG") ? newPONumber : message)
        .collect(Collectors.toList());

お知らせtoUpperCase条件内でのみ適用され、あなたの伝統のように、結果の文字列ではなく、forループソリューション。

おすすめ

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