Java流:如何只更改流的第一个元素?

Java流:如何只更改流的第一个元素?,java,java-stream,Java,Java Stream,有一个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'"); }

有一个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'");
 }
如何只获取子流的第一个元素(Arrays.stream)并将其传递给转换方法? “doTransform()”方法已实现,所以不必在意它。 我只需要将“+7913152”、“8912345”和“916952”分开,将其传递给doTransform(),并获得一个新列表:

"'8913152','2020-05-25 00:00:25'"
"'8912345','2020-05-25 00:01:49'"
"'8916952','2020-05-25 00:01:55'" 

我们可以使用
在拆分时使用
限制将元素拆分为两部分(需要更改的首字母和剩余字符串)

List List=List.stream()
.map(输入->输入.split(“,”,2))
.map(数据->字符串.join(“,”,doTransaform(数据[0]),数据[1]))
.collect(Collectors.toList());
如果字符串中有多个逗号(,)
分隔的部分,这将很有帮助,并且肯定会提高效率。

下面的代码可以工作


List<String> collect = list.stream()
                .map(a -> a.replace(String.valueOf(a.charAt(1)), "2"))
                .collect(Collectors.toList());


List collect=List.stream()
.map(a->a.replace(String.valueOf(a.charAt(1)),“2”))
.collect(Collectors.toList());
按以下步骤操作:

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());

我假设电话的长度不在字符串中,例如
“+7913152”,“2020-05-25 00:00:25”
将为
7
如果超过此值,则从头部移除剩余的数字并替换为
8
以使其成为有效数字,否则如果数字长度小于
7
,则只需添加
8
注意:如果数字的长度像
3
4
等,您可以处理

 public class PlayWithStream {
        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> collect = list.stream()
                    .map(PlayWithStream::doTransform)
                    .collect(Collectors.toList());

        System.out.println(collect);
        }
         public static String doTransform(String phone1) {
             String []a=phone1.split(",");
             String phone=a[0];

                 boolean flag2 = phone.substring(0, 1).matches("[8]");
                 String finaloutput="";
                 if(!flag2) {
                int len=phone.length();

                if(len>7) {
                    String sub=phone.substring(0,phone.length()-6);
                    String newStr=phone.replace(sub, "");
                    finaloutput="8".concat(newStr);

                }else {
                    finaloutput="8".concat(phone);
                }

            }
            return finaloutput+","+a[1];
         }
    }
公共类PlayWithStream{
公共静态void main(字符串[]args){
列表=新的ArrayList();
列表。添加(“+7913152”,“2020-05-25 00:00:25”);
添加(“8912345”,“2020-05-25 00:01:49”);
添加(“916952”,“2020-05-25 00:01:55”);
List collect=List.stream()
.map(PlayWithStream::doTransform)
.collect(Collectors.toList());
系统输出打印项次(收集);
}
公共静态字符串点转换(字符串phone1){
字符串[]a=phone1.split(“,”);
字符串电话=a[0];
布尔flag2=phone.substring(0,1).matches(“[8]”);
字符串finaloutput=“”;
如果(!flag2){
int len=phone.length();
如果(len>7){
String sub=phone.substring(0,phone.length()-6);
字符串newStr=phone.replace(子“”);
finaloutput=“8”。concat(newStr);
}否则{
finaloutput=“8”。concat(电话);
}
}
返回最终输出+“,”+a[1];
}
}

不仅替换为“2”。可能还有更复杂的转换。但这并不重要。
['212345'、'2020-05-25 00:00:25'、'212345'、'2020-05-25 00:01:49'、'212345'、'2020-05-25 00:01:55']
这是我的输出。您的问题已修改,因此请确保在一次内获得所需的输出。什么转换规则将
'+7913152'
转换为
'8913152'
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());
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;
    }
}
'x7913152','2020-05-25 00:00:25'
'x8912345','2020-05-25 00:01:49'
'x916952','2020-05-25 00:01:55'
 public class PlayWithStream {
        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> collect = list.stream()
                    .map(PlayWithStream::doTransform)
                    .collect(Collectors.toList());

        System.out.println(collect);
        }
         public static String doTransform(String phone1) {
             String []a=phone1.split(",");
             String phone=a[0];

                 boolean flag2 = phone.substring(0, 1).matches("[8]");
                 String finaloutput="";
                 if(!flag2) {
                int len=phone.length();

                if(len>7) {
                    String sub=phone.substring(0,phone.length()-6);
                    String newStr=phone.replace(sub, "");
                    finaloutput="8".concat(newStr);

                }else {
                    finaloutput="8".concat(phone);
                }

            }
            return finaloutput+","+a[1];
         }
    }