【问题标题】:Binding 2 arraylists android绑定2个arraylists android
【发布时间】:2020-04-11 17:29:54
【问题描述】:

首先抱歉,如果标题没有真正解释问题应该是什么。

我的 android (java) 代码中有 2 个 ArrayList

例如,假设第一个由字符串组成,第二个由整数组成。

ArrayLis<String> strings = new ArrayList<String>();
strings.add("s1");
strings.add("s2");
strings.add("s1");
strings.add("s3");
strings.add("s4");
strings.add("s1");
strings.add("s2");

ArrayList<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);
ints.add(5);
ints.add(3);
ints.add(4);
ints.add(3);
ints.add(2);

以这个例子为例,假设数组列表字符串中的每个值对应一个数组 int 的值,但 int 值可能会改变

我想去除字符串数组中的重复,我使用了LinkedHashSet来做到这一点:

LinkedHashSet<String>hashset = new LinkedHashSet<>(strings);
strings = new ArrayList<> hashset;

现在的问题是我删除了重复的字符串条目,但我也删除了每个字符串与其 int 值之间的链接。

如何使用字符串的最小 int 值获取新的“ints”数组,例如对于 s1,它具有 1、5 和 3 作为绑定值得到 1 值:

strings = ["s1", "s2", "s3", "s4"];
ints = [1, 2, ,3, 4];

我想过使用地图。但这是最好的方法吗? (将字符串映射到 int 并且每当发生重复时检查 int 是否较小并替换映射值)

【问题讨论】:

    标签: java android arraylist


    【解决方案1】:

    我将遍历字符串列表并将其转换为链接映射,以便将字符串值转换为最小 int。完成后,如果您真的愿意,可以重新创建这两个列表:

    Map<String, Integer> map = new LinkedHashMap<>();
    for (int index = 0; index < strings.size(); ++i) {
        final int i = index;
        map.compute(
            strings.get(i), (k, v) -> v == null ? ints.get(i) : Math.min(v, ints.get(i)));
    }
    
    // If you want two lists again:
    strings = new ArrayList<>(map.keySet());
    ints = new ArrayList<>(map.values());
    

    【讨论】:

    • 感谢您的回复。但我遇到了一些问题。我使用的是 1.7 java,所以不能使用 lambdas。我的目标也是 os 5(API 21),计算需要 24。但我遵循了它背后的主要思想(MAP),它与我合作。再次感谢。 (PS:在您的回复中,将永远不会使用循环,因为它用于大小为 0 的新地图)
    • @EYakoumi 哎呀,感谢您的关注!它应该循环到strings.size(),而不是map.size()。已编辑和修复。
    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多