多个转换Java Stream

时间:2018-01-24 21:22:28

标签: java list java-8 java-stream

我有一个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);
}

3 个答案:

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

这些应用于基础流的遭遇顺序中的元素。