我应该这样做吗?

Sta*_*lin 3 java guava

我才开始学习番石榴.所以我不知道最佳实践等等.这些是代码(它绑定了一些类,并按输入集合放入顺序):

public ImmutableList<ModelBean> toBean(Collection<Shape> model) {
    return ImmutableList.copyOf(Collections2.transform(Ordering.from(new Comparator<Shape>() {
        @Override
        public int compare(Shape o1, Shape o2) {
            return 0; //here placed some one line logic
        }
    }).sortedCopy(model), new Function<Shape, ModelBean>() {
        final ModelBeanCreator binder = new ModelBeanCreator();

        @Override
        public ModelBean apply(Shape input) {
            return binder.createModelBean(input);
        }
    }));
}
Run Code Online (Sandbox Code Playgroud)

那么,我应该在几个操作中将它分开吗?

更新 它做什么?它需要收集.对它进行排序.将每个对象映射到另一个对象.创建新的ImmutableList并返回它.

Jon*_*eet 5

我认为在一次调用中组合多个操作通常是可以的(这只是一种耻辱,Java没有扩展方法使它更漂亮),但我建议你不要将逻辑内联.使用匿名类,它只会变得混乱.

相反,将谓词,排序,预测等声明为常量:

private static Function<Shape, ModelBean> MODEL_BEAN_PROJECTION =
    new Function<Shape, ModelBean>() {
    final ModelBeanCreator binder = new ModelBeanCreator();

    @Override
    public ModelBean apply(Shape input) {
        return binder.createModelBean(input);
    }
};
Run Code Online (Sandbox Code Playgroud)

然后你可以MODEL_BEAN_PROJECTION在以后的方法调用中使用.这样你就可以获得实际上相当容易阅读的代码,尽管做了很多.

另一方面,使用局部变量来描述在转换的每个阶段到目前为止所获得的内容的选项也是有用的.通常值得尝试一些代码,并查看哪些代码更具可读性 - 并且也要问同事.还尝试了不同的空白选项 - 我发现使用空白的代码之间的可读性差异可能很大.