Java流的多重转换
我有一个字符串列表,我有定义的方法来转换列表中的每个元素,例如,将每个字符串转换为int,将“x”添加到int,并将int转换为字符串。我需要一个转换字符串的最终列表 我想使用Java流api来实现它 这是示例代码Java流的多重转换,java,list,java-8,java-stream,Java,List,Java 8,Java Stream,我有一个字符串列表,我有定义的方法来转换列表中的每个元素,例如,将每个字符串转换为int,将“x”添加到int,并将int转换为字符串。我需要一个转换字符串的最终列表 我想使用Java流api来实现它 这是示例代码 private void test(){ List<String> mylist = new ArrayList<>(); mylist.add("1"); mylist.add("2"); mylist.add("3");
private void test(){
List<String> mylist = new ArrayList<>();
mylist.add("1");
mylist.add("2");
mylist.add("3");
//need list of String like [11,12,13] after transforming each element through the below methods.
}
private int inttoString(String s){
return Integer.parseInt(s);
}
private int addX(int st){
return st+10;
}
private String convertToStr(int s){
return Integer.toString(s);
}
private void test(){
List mylist=new ArrayList();
mylist.添加(“1”);
mylist.添加(“2”);
mylist.添加(“3”);
//通过以下方法转换每个元素后,需要类似于[11,12,13]的字符串列表。
}
私有int inttoString(字符串s){
返回整数.parseInt;
}
专用int地址(int st){
返回st+10;
}
私有字符串convertToStr(int-s){
返回整数.toString(s);
}
您可以对流应用任意多个map
操作
e、 g
foo.stream()
.map(functionA)
.map(functionB)
.map(functionC)
.collect(Collectors.toList());
这些元素应用于基础流的相遇顺序中的元素。您可以像这样使用多个元素:
List<String> result = mylist.stream()
.map(s -> inttoString(s))
.map(s -> addX(s))
.map(s -> convertToStr(s))
.collect(toList());
List result=mylist.stream()
.map->inttoString(s))
.map->addX(s))
.map->convertToStr(s))
.collect(toList());
或者在一张地图中:
List<String> result = mylist.stream()
.map(s -> convertToStr( addX( inttoString(s) ) ))
.collect(toList());
List result=mylist.stream()
.map->convertToStr(addX(inttoString)))
.collect(toList());
或者没有你的方法:
List<String> result = mylist.stream()
.map(s -> String.valueOf(Integer.parseInt(s) + 10))
.collect(toList());
List result=mylist.stream()
.map->String.valueOf(Integer.parseInt)+10)
.collect(toList());
您不需要使用这些方法来执行如此简单的操作。Java 8流函数允许以简洁明了的方式实现这一点:
List<String> list = mylist.stream()
.mapToInt(Integer::parseInt)
.map(x -> x + 10)
.mapToObj(String::valueOf)
.collect(Collectors.toList());
List List=mylist.stream()
.mapToInt(整数::parseInt)
.map(x->x+10)
.mapToObj(字符串::valueOf)
.collect(Collectors.toList());
差别不大,但正在考虑另一个变量是-->mylist.stream().mapToInt(Integer::parseInt).map(x->x+10).mapToObj(String::valueOf).collect(collector.toList())代码>。好处是不执行装箱和取消装箱。@Aominè这是一个小小的更改,对于较大的列表是有效的。我想:)谢谢你的反馈:)另外,编辑。mapToObj(Integer::toString)
也是有效的。因此,如果在方法引用中使用Integer.toString()语句,则该语句是不明确的。@AominèRight。当我修改一个“长”答案时,这往往是个问题。我必须检查所有内容以确保一致性。我每次都不执行的内容:)