我需要将这段包含多个for循环和if语句的代码转换为Java 8流:
public static List<String> removeDuplicateNames(String[] namesArray){
List<String> uniqueNames = new ArrayList<>();
int occurrence = 0;
for(String name: namesArray) {
for (String name2 : namesArray)
if (name.equalsIgnoreCase(name2))
occurrence++;
if (occurrence == 1)
uniqueNames.add(name);
occurrence = 0;
}
return uniqueNames;
}
我需要循环遍历一个数组的名称,并返回一个仅包含不重复的名称的列表。如果一个名字出现不止一次,我需要将它从最终列表中删除。
输入->[“Tom”,“George”,“Tom”,“Mike”,“Brian”]
输出->[“George”,“Mike”,“Brian”]
有谁能帮忙吗?
java prettyprint-override">List<String> names = Arrays.asList("Tom", "George", "Tom", "Mike", "Brian");
Set<String> namesHavingOnlyOneOccurrence = names.stream().collect(Collectors.groupingBy(o -> o)).entrySet()
.stream()
.filter(stringListEntry -> stringListEntry.getValue().size() == 1)
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
构建name
到频率计数的映射,然后获得计数为1的名称。
这实际上也是您的非流代码应该做的,以获得更好的性能。
public static List<String> removeDuplicateNames(String... namesArray) {
return Stream.of(namesArray)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().stream()
.filter(e -> e.getValue() == 1)
.map(Entry::getKey)
.collect(Collectors.toList());
}
测试
System.out.println(removeDuplicateNames("This", "is", "a", "test", "a", "real", "good", "test"));
输出
[This, is, real, good]
作为练习,我将一些旧代码转换为函数流。我对溪流了解不多。看起来转换这段代码应该很简单,但我运气不太好。该方法从给定的整数开始,将其传递给isPrime,如果它是prime,isPrime将返回true。然后将要打印的新(下一个)素数交给用户。如果isPrime为false,则i递增,我们检查下一个整数。
问题内容: 将循环转换为理解很简单: 至 但是,我不确定在循环涉及为引用分配值时如何进行。 并且理解最终看起来像这样: 这将计算多次,而循环仅计算一次并保存一个引用。我尝试了以下方法: 失败的原因是无法正常工作,并且: 这也不起作用。我知道可以通过和打开包装,但不确定在哪里放置。是否有可能以一种整洁的方式将这种循环变成理解? 问题答案: 您不能直接将该循环转换为理解力。理解是表达式,只能包含表达式
我已经有一段时间没有编程了,我正在努力回到事情的转折点,这就是我已经走了多远。我的问题是,我如何循环第二个问题,这样,如果回答不是肯定的,它会再次问这个问题。我曾尝试在if语句周围放置一个循环,但每当我尝试从用户那里获得另一个响应时,它告诉我无法使用变量response来执行此操作。我觉得这是一个简单的修复,因为我理解循环,但我有一个困难的时候围绕着这个具体的问题我的头,提前谢谢你。
问题内容: 我正在尝试将此for循环重写为for每个循环。 这就是我尝试过的 谁能指出我正确的方向?谢谢。 问题答案: 我认为您想得太多… :)
我试图将此for循环和if条件转换为Java流,过滤和收集 我试过这个: 然而,这是完全错误的。我没能按预期工作 有人能告诉我,我应该如何使用流,过滤,收集?
将循环转换为时遇到问题。 方法返回 我尝试过,但需要等待将转换为并且我无法添加它。 我正在尝试下载大约15个报告异步,以等待所有的已经下载,然后将它们合并成一个PDF。 注意:我使用的是框架4.8.3