从Java中删除重复值中的单个Id

时间:2016-04-30 21:12:50

标签: java

我的字符串值低于以下值:

String id = "21713|4 Pieces=50,21701|2 pieces=35,21701|250 Gram=30,21701|250 Gram=30,21701|250 Gram=30,";

上述ID重复21701|250 Gram=30三次。我想要做的就是,当我点击删除项目按钮时,将通过否。对于计数,只应移除21701|250 Gram=30的大量计数。

我们如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

我认为您拥有的最佳选择是将String解析为存储重复次数的Map。 使用此Map,您可以在按下按钮后重建String。

限制:如果字符串部分的顺序很重要,则可能会遇到问题。

恕我直言,在您的应用程序中开始使用这样的字符串似乎是糟糕的设计。 (除非是练习)

答案 1 :(得分:0)

试试这个。

static String remove(String id, int countToRemove) {
    Set<String> set = Stream.of(id.split("(?<=,)"))
        .collect(Collectors.groupingBy(s -> s, Collectors.counting()))
        .entrySet().stream()
        .filter(e -> e.getValue() == countToRemove)
        .map(e -> e.getKey())
        .collect(Collectors.toSet());
    return Stream.of(id.split("(?<=,)"))
        .filter(s -> !set.contains(s))
        .collect(Collectors.joining());
}

String id = "21713|4 Pieces=50,21701|2 pieces=35,21701|250 Gram=30,21701|250 Gram=30,21701|250 Gram=30,";
System.out.println(remove(id, 3));

结果:

21713|4 Pieces=50,21701|2 pieces=35,

在java7中

static String remove(String id, int countToRemove) {
    Map<String, Integer> map = new HashMap<>();
    for (String key : id.split("(?<=,)")) {
        Integer value = map.get(key);
        if (value == null)
            value = 0;
        map.put(key, value + 1);
    }
    Set<String> set = new HashSet<>();
    for (Entry<String, Integer> e : map.entrySet())
        if (e.getValue() == countToRemove)
            set.add(e.getKey());
    StringBuilder sb = new StringBuilder();
    for (String key : id.split("(?<=,)"))
        if (!set.contains(key))
            sb.append(key);
    return sb.toString();
}