gpt4 book ai didi

java - String -Java 8 lambda 中的重复项

转载 作者:行者123 更新时间:2023-12-01 19:30:06 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来使用 Java 8 lambda 打印重复项并在字符串中进行计数,但是在尝试将值插入到 Map From List 时出现此错误。有人可以帮忙解决出什么问题吗?我首先将 String 转换为 CharArray,然后添加到列表中,以便我可以对列表进行内部迭代,并检查 Map 中是否已存在该值来存储计数和每个字符

import java.util.Arrays;
import java.util.List;
import java.util.TreeMap;

public class PrintDuplicateInString {

public static void main(String[] a) {
printDuplicate("TestJava");
}

private static String printDuplicate(String s) {
List<char[]> stringList = null;
if(s != null && s.length() > 0) {
char[] duplicateStr = s.toCharArray();
stringList = Arrays.asList(s.toCharArray());
TreeMap<Character,Integer> trmap = new TreeMap<>();
stringList.forEach(i -> (trmap.containsKey(i))?(trmap.put(i,trmap.get(i)+1)):(trmap.put(i,1)));
}
stringList.forEach(System.out::println);
}

}

最佳答案

而不是使用 List<char[]> ,您可以将字符串的字符存储为:

List<Character> characters = s.chars()
.mapToObj(e -> (char) e)
.collect(Collectors.toList());

进一步查找字符的频率很简单:

Map<Character, Long> trMap = characters.stream()
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));

在表示中,您已经编写了它,如下所示:

Map<Character, Long> trmap = new TreeMap<>();
for (Character c : characters) {
if (trmap.containsKey(c)) {
trmap.put(c, trmap.get(c) + 1);
} else {
trmap.put(c, 1L);
}
}

关于java - String -Java 8 lambda 中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60012206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com