想要在一个列表中获取每个单词中的非重复字符,并使用java 8将它们连接到一个新单词:Ex:[ non,repeated,character ]-〉orpatdhte有什么提示吗?
fgw7neuy1#
这是从一个单词中消除重复字母的一种方法:
public String removeDuplicates(String text) { Map<String, List<String>> charsVsCount = Arrays.stream(text.split("")) .collect(Collectors.groupingBy(c -> c, LinkedHashMap::new, Collectors.toList())); return charsVsCount.entrySet().stream() .filter(entry -> entry.getValue().size() == 1) .map(entry -> entry.getKey()) .collect(Collectors.joining("")); }
现在,如果你有一个单词列表,你将对每个单词应用这个逻辑,最后,我们将把它们合并到一起:
var result = words.stream() .map(word -> removeDuplicates(word)) .collect(Collectors.joining("")); assertEquals("orpatdhte", result);
bz4sfanl2#
我终于能够找到一个单一的班轮为上述要求,需要注意的是,我在groupingBy子句中使用了LinkedHashMap来维护非重复字符的序列
List<String> l = Arrays.asList("non", "repeated", "character"); System.out.println(l.stream().map(word -> { return Arrays.stream(word.split("")).collect(Collectors.groupingBy(Function.identity(),LinkedHashMap::new,Collectors.counting())).entrySet().stream().filter(e-> e.getValue()==1).map(e->e.getKey()).collect(Collectors.joining()); }).collect(Collectors.joining()));
8ehkhllq3#
因为这是家庭作业/面试问题,我只提供伪代码:对于每个单词:
有多种编码方式。注意:由于需要保留字母顺序,HashMap不会有太大的帮助,但是还有另一种Map实现非常适合。提示:它可以用一行代码编码(尽管有点长)。
HashMap
3条答案
按热度按时间fgw7neuy1#
这是从一个单词中消除重复字母的一种方法:
现在,如果你有一个单词列表,你将对每个单词应用这个逻辑,最后,我们将把它们合并到一起:
bz4sfanl2#
我终于能够找到一个单一的班轮为上述要求,
需要注意的是,我在groupingBy子句中使用了LinkedHashMap来维护非重复字符的序列
8ehkhllq3#
因为这是家庭作业/面试问题,我只提供伪代码:
对于每个单词:
有多种编码方式。
注意:由于需要保留字母顺序,
HashMap
不会有太大的帮助,但是还有另一种Map实现非常适合。提示:它可以用一行代码编码(尽管有点长)。