Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Stream: How to change only first element of stream?

There is an ArrayList:

 public void mainMethod() {
     List<String> list = new ArrayList<>();
     list.add("'+7913152','2020-05-25 00:00:25'");
     list.add("'8912345','2020-05-25 00:01:49'");
     list.add("'916952','2020-05-25 00:01:55'");
 }

and method which transforms a string:

 public String doTransform(String phone) {
     String correctNumber;
 ..... make some changes...
     return correctNumber;
 }


list.stream().forEach(line -> {
                Arrays.stream(line.split(","))... and what else? 

How to take only first element of sub-stream (Arrays.stream) and pass it to transforming method? "doTransform()" method is implemented, so don't care about it. I just need to separate '+7913152', '8912345' and '916952', pass it to doTransform() and get an new List:

"'8913152','2020-05-25 00:00:25'"
"'8912345','2020-05-25 00:01:49'"
"'8916952','2020-05-25 00:01:55'" 
like image 690
harp1814 Avatar asked Sep 10 '25 16:09

harp1814


1 Answers

Do it as follows:

List<String> result = list.stream()
                            .map(s -> {
                                    String[] parts = s.split(",");
                                    String st = doTransform(String.valueOf(Integer.parseInt(parts[0].replace("'", ""))));
                                    return ("'" + st + "'") + "," + parts[1];
                                }).collect(Collectors.toList());

Demo:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("'+7913152','2020-05-25 00:00:25'");
        list.add("'8912345','2020-05-25 00:01:49'");
        list.add("'916952','2020-05-25 00:01:55'");

        List<String> result = list.stream()
                                    .map(s -> {
                                        String[] parts = s.split(",");
                                        String st = doTransform(String.valueOf(Integer.parseInt(parts[0].replace("'", ""))));
                                        return ("'" + st + "'") + "," + parts[1];
                                    }).collect(Collectors.toList());

        // Display
        result.forEach(System.out::println);
    }

    static String doTransform(String phone) {
        return "x" + phone;
    }
}

Output:

'x7913152','2020-05-25 00:00:25'
'x8912345','2020-05-25 00:01:49'
'x916952','2020-05-25 00:01:55'
like image 155
Arvind Kumar Avinash Avatar answered Sep 13 '25 06:09

Arvind Kumar Avinash