用于合并/填充列表中元素的java helper类

电视的弗兰克

当将模型列表从(例如)Thing映射到MyModel时,这是我们代码库中的常见模式:

List<MyModel> myModelList = new ArrayList<>();
for (Thing thing : things) {
    MyModel myModel = new MyModel(thing.getId());
    if (myModelList.contains(myModel)) {
        myModel = myModelList.get(myModelList.indexOf(myModel));
    } else {
        myModel.setName(thing.getName());
        myModelList.add(myModel);
    }
    myModel.setSomeQuantity(myModel.getSomeQuantity() + thing.getSomeQuantity());
}

(假设MyModel具有使用id来确定相等性的equals()和hashCode())

这可以通过几种不同的方式完成,您可以使用ID为键的地图等。我们可以为其创建通用的帮助器类,该类可在任何地方使用。

但是我想知道的是,是否在某些java,apache,spring,google或其他库中已经存在某种有效且干净的方法来帮助所有此类的帮助器类或其他类型的构造?

保罗·波丁顿

您同时使用containsindexOf上一个List两者通常都需要线性搜索,因此应尽可能避免。绝对不应该那样indexOf直接使用contains您永远不需要这样做

if (list.contains(x)) 
    x = list.get(list.indexOf(x));

因为你总是可以这样做

int index = list.indexOf(x);
if (index >= 0)
    x = list.get(index);

这是更多代码,但避免搜索列表两次。

但是,我不喜欢您的使用equalshashCode通常,equal对象可以互换使用,而在您的情况下,的两个版本myModel是不相同的。仅列表中已有的一个携带有关名称和总量的额外信息。

我建议用只包含两个字段(MyModel的不可变类代替然后,您可以执行此操作(假设您使用的是Java 8)MyModelidname

Map<MyModel, Double> quantities = new HashMap<>();
for (Thing thing : things)
    quantities.merge(thing.getModel(), thing.getQuantity(), Double::sum);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java Helper类-不同形式的语法

来自分类Dev

在Ruby Helper中将HTML类与默认值合并

来自分类Dev

Java / Android:收集Helper类中的所有Button方法

来自分类Dev

更改列表中元素的类并循环

来自分类Dev

是否有适用于 Java 的 Guard Clause Utility/Helper 类?

来自分类Dev

如何检查元素是否是类列表中元素的子类

来自分类Dev

Android Helper类

来自分类Dev

NSURLSession Helper类

来自分类Dev

cakePHP- PieChart Helper类

来自分类Dev

cakePHP- PieChart Helper类

来自分类Dev

Xamarin形式:MasterPage Helper类

来自分类Dev

Vuetify 断点与 CSS Helper 类

来自分类Dev

监视AngularJS指令中元素的类更改

来自分类Dev

Razor HTML Helper类-无法访问标准HTML Helper

来自分类Dev

python类中的classmethod和helper函数

来自分类Dev

在C ++中调用Helper类的重写方法

来自分类Dev

python类中的classmethod和helper函数

来自分类Dev

Vb.net中的Mediator Helper类

来自分类Dev

如何在反应中导入 Helper 类

来自分类Dev

HTML Helper下拉列表

来自分类Dev

列表元素的jQuery类

来自分类Dev

如何从Helper类调用Main_Activity类中的方法?

来自分类Dev

如何识别在 Helper 类中创建的类对象

来自分类Dev

用类填充下拉列表

来自分类Dev

包含用于比较两个列表中元素的操作

来自分类Dev

填充HTML Helper路由参数

来自分类Dev

无法将填充或边距应用于“ lead”类<p>元素

来自分类Dev

检查PHP 5.6中类的数组常量中元素的存在

来自分类Dev

如何正确实现容器类中元素的更改?