首页 > 解决方案 > 如何从列表中删除重复元素?

问题描述

列表列表 = ["f1,f2","f2,f3","f4,f5","f2,f1","f5,f4"];

输出列表将是 List uniqueList = ["f1,f2","f2,f3","f4,f5"]

标签: javaarrayscollectionsjava-8

解决方案


使用附加类:

    static class Pair {
    String a, b;

    Pair(String s) {
        String[] arr = s.split(",");
        this.a = arr[0];
        this.b = arr[1];
    }

    static String pairToString(Pair p) {
        return p.a + "," + p.b;
    }

    @Override
    public int hashCode() {
        return Objects.hash(a, b) + Objects.hash(b, a);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Pair p = (Pair) o;
        return (p.a.equals(a) && p.b.equals(b)) || (p.b.equals(a) && p.a.equals(b));
    }

}

现在您可以使用:

 public static void main(String[] args) {
        List<String> list = Arrays.asList("f1,f2", "f2,f3", "f4,f5", "f2,f1", "f5,f4");
        List<String> strings = list
                .stream()
                .map(Pair::new)
                .distinct()
                .map(Pair::pairToString)
                .collect(Collectors.toList());
    }

推荐阅读