我有一个String列表,我有定义的方法来转换列表中的每个元素,例如。将每个字符串转换为int,将“x”添加到int并将int转换为String。我需要一个转换字符串的最终列表。
我想使用Java stream api。
这是示例代码
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);
}
答案 0 :(得分:2)
您不应该使用这些方法来执行如此简单的操作 Java 8流功能允许以简洁明了的方式实现这一点:
List<String> list = mylist.stream()
.mapToInt(Integer::parseInt)
.map(x -> x + 10)
.mapToObj(String::valueOf)
.collect(Collectors.toList());
答案 1 :(得分:1)
您可以像这样使用多个map:
List<String> result = mylist.stream()
.map(s -> inttoString(s))
.map(s -> addX(s))
.map(s -> convertToStr(s))
.collect(toList());
或在一张地图中:
List<String> result = mylist.stream()
.map(s -> convertToStr( addX( inttoString(s) ) ))
.collect(toList());
或者没有你的方法:
List<String> result = mylist.stream()
.map(s -> String.valueOf(Integer.parseInt(s) + 10))
.collect(toList());
答案 2 :(得分:0)
您可以根据需要对流应用尽可能多的map
操作。
例如,
foo.stream()
.map(functionA)
.map(functionB)
.map(functionC)
.collect(Collectors.toList());
这些应用于基础流的遭遇顺序中的元素。