如何在流中使用set方法?

时间:2018-06-27 06:48:05

标签: java java-stream

您好,我在db中有一个以下字段:

String abcTitlename;
 String abcTitlepage;

我想从实体中获取这些字段,但是我想使用不带'abc'前缀的内容。例子

我的字段是abcTittlename名称,但是我想获得这个标题名称。

我可以使用过滤器获取这些字段吗?我可以使用replaceAll方法吗?像这样:

stream = stream.map(e -> ((DbFields)e).setFieldname(((DbFields) e).getFieldname().replace("abc","")))
                        .filter(e -> ((DbFields) e).getIscomputed().equals(0));

        return stream.map(e -> ((DbFields) e).getFieldname().toLowerCase(Locale.US)).collect(Collectors.toSet());

    }

我有DbFields类,它具有getFieldName(),getFieldtype()与方法。

我得到一个

Error:(170, 29) java: incompatible types: inference variable R has incompatible bounds
    upper bounds: java.lang.Object
    lower bounds: void

错误。我究竟做错了什么? 请帮帮我..

3 个答案:

答案 0 :(得分:0)

操作后返回对象

stream = stream.map(e -> {
             ((DbFields)e).setFieldname(((DbFields) e).getFieldname().replace("abc",""));
             return e;
         })
         ...

答案 1 :(得分:0)

您可能希望将.map替换为.peek,因为您没有映射到其他对象。您只是在更新同一对象。

在第二次地图调用中,您没有更新字段名称。

答案 2 :(得分:0)

您可以使用开头的类型转换进行单独的map调用,因此所有这些强制类型转换都不会污染您的代码。

下面是示例,使用建议的peek方法重写

return stream.map(e -> (DbFields)e)
      .filter(e -> e.getIscomputed().equals(0))
      .peek(e -> e.setFieldname(e.getFieldname().replace("abc", "")))
      .map(e -> e.getFieldname().toLowerCase(Locale.US))
      .collect(Collectors.toSet());