java - 如何根据两个自定义对象删除列表中的重复项

标签 java sorting collections duplicates

我有一个 ProductDetail 类,它包含两个变量 productNameproductVersion。我需要根据最新的 productVersion 替换列表中的重复项。

例子:

class ProductDetails {
   string productName;
   string productVersion;
}
new ProductDetails("ios", "9.1.0")
new ProductDetails("android", "6.0.1")
new ProductDetails("android", "5.1.1")
new ProductDetails("ios", "10.0.0")

结果: 安卓6.0.1 iOS 10.0.0

提前致谢。

最佳答案

这应该适合你:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;


public class ProductDetails {

private String productName;
private String productVersion;
private List<ProductDetails> productData = null;

public ProductDetails(String productName,String productVersion){
    this.productName = productName;
    this.productVersion = productVersion;
    if(productData == null) {
        productData = new ArrayList<ProductDetails>();
        adNewProduct(this);
    }
}

private void  adNewProduct(ProductDetails p){
    String[] s1 = p.productVersion.split(Pattern.quote("."));
    for (ProductDetails dpp: productData) {
        if (dpp.productName.equals(p.productName)) {
            int index = productData.indexOf(dpp);
            String[] s2 = dpp.productVersion.split(Pattern.quote("."));
            for(int i = 0; i < s1.length; i++) {
                int v1 = Integer.valueOf(s1[i]);
                int v2 = Integer.valueOf(s2[i]);

                if (v1 > v2) {
                    productData.set(index,p);
                    return;
                }
            }
        }
    }
    productData.add(p);
}


@Override  // you can modify it to how you want
public String toString(){
   
    String s = "";

    for (ProductDetails p: productData){
        s += "ProductName: " + p.productName + " ProductVersion: " + p.productVersion + "\n";
    }
    return s;
}


//the main method
public static void main(String[] args) {
    ProductDetails k = new ProductDetails("ios", "9.1.1");
    k.adNewProduct(new ProductDetails("android", "5.1.1"));
    k.adNewProduct(new ProductDetails("android", "6.0.1"));
    k.adNewProduct(new ProductDetails("ios", "10.0.0"));

    System.out.println(k);

    }

}

输出:

ProductName: ios ProductVersion: 10.0.0

ProductName: android ProductVersion: 6.0.1

关于java - 如何根据两个自定义对象删除列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37813338/

相关文章:

java - 停止线程并运行一些清理代码的最安全/最佳方法是什么

java - 无法在 couchbase 服务器社区版 3.0.1 上更新 6m+ 文档

sql - SQL:按电子邮件域名排序

java - Arrays.asList 返回类型不匹配混淆

java - iText5 PDF 内容在页脚上被覆盖

java - 注释内的代码在 Unicode 序列之后执行

Python : Sort file by arbitrary column, 其中列包含时间值

perl - 在 perl 中使用 x.x.x.x 格式对数字进行排序

c# - 使用 HashSet 根据 T 的属性删除不在另一个集合中的项目

java - 用于保存标记化字符串的 Android 内存高效收集