Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计数并删除字符串列表中的重复项,但将重复计数添加到键中(任何惯用的java8方式?)_Java_Java 8_Java Stream - Fatal编程技术网

计数并删除字符串列表中的重复项,但将重复计数添加到键中(任何惯用的java8方式?)

计数并删除字符串列表中的重复项,但将重复计数添加到键中(任何惯用的java8方式?),java,java-8,java-stream,Java,Java 8,Java Stream,我有一个输入字符串(用和分隔),其中包含以下术语: GenericRequest.param[i] SpecificRequest.param[i]=XYZ GenericRequest.param[i] 我希望输出得到“合并”(并用&分隔),但有一点小小的扭曲: GenericRequest.param[i]=2 SpecificRequest.param[i]=XYZ 到目前为止,我可以.split(&)和.filter(s->s.endsWith(“[I]”),但这会导致我使用单个字符

我有一个输入字符串(用
分隔),其中包含以下术语:

GenericRequest.param[i]
SpecificRequest.param[i]=XYZ
GenericRequest.param[i]
我希望输出得到“合并”(并用
&
分隔),但有一点小小的扭曲:

GenericRequest.param[i]=2
SpecificRequest.param[i]=XYZ
到目前为止,我可以
.split(&)
.filter(s->s.endsWith(“[I]”)
,但这会导致我使用单个字符串;我需要对所有字符串进行可见性,以便我可以有效地计数重复项,删除重复项,然后将此额外的元数据位添加到相关键中(在本例中,计数
generirequest.param[I]的重复项)
,删除重复项,并使用
=2对其进行扩充

我可以通过构建过滤键的频率计数(以
“[I]”“
”结尾)并将其添加到未过滤键的列表中来实现这一点,但我不知道如何以惯用的java8方式实现

编辑:以下是完整字符串的外观

generirequest.param[i]&specifirequest.param[i]=XYZ&generirequest.param[i]

以下是我迄今为止所尝试的:

String str = "GenericRequest.param[i]&SpecificRequest.param[i]=XYZ&GenericRequest.param[i]";
String result = Arrays.asList(str
                      .split("&"))
                      .filter(s -> s.endsWith("[i]");
                      .magic(?);

试试这个,首先按键分组并计算其值,然后将键和值映射到字符串

    String str = "GenericRequest.param[i]&SpecificRequest.param[i]=XYZ&GenericRequest.param[i]";
    Map<String, Long> map = Arrays.stream(str.split("&")).collect(Collectors.groupingBy(s -> s, Collectors.counting()));
    System.out.println(map);
    List<String> list = map.entrySet().stream().sorted(Map.Entry.comparingByKey())
            .map(e -> e.getKey() + (e.getValue() == 1 ? "" : "=" + e.getValue())).collect(Collectors.toList());
    System.out.println(list);

你能发布完整的代码吗?用字符串形式的输入文本样本和你使用的方法tried@Saravana我已经用实际的字符串编辑了我的文章,希望现在更清晰。
{SpecificRequest.param[i]=XYZ=1, GenericRequest.param[i]=2}
[GenericRequest.param[i]=2, SpecificRequest.param[i]=XYZ]