我有一个具有以下签名的方法:
int sum(Map<String, Integer> map, String target) { }
Run Code Online (Sandbox Code Playgroud)
我试图找到键具有前缀作为给定target字符串的条目的值的总和。我想使用流来做到这一点。这就是我所做的:
return map.entrySet().stream()
.filter((k, v) -> k.startsWith(target))
.map((k, v) -> v)
.sum();
Run Code Online (Sandbox Code Playgroud)
编译器给出以下错误:
错误:类型不兼容:lambda 表达式中的参数类型不兼容
我在这里做错了什么?
我正在尝试使用 Streams.zip 创建地图。我不关心流返回的结果,我只需要为每个元素执行 lambda。这是我的代码
String x[] = {"a", "b"};
String y[] = {"c", "d"};
var data = new HashMap<String, String>();
var myStream = Streams.zip(Arrays.stream(x), Arrays.stream(y),
(arg1, arg2) -> { data.put(arg1, arg2); return 0; };
var result = myStream.collect(Collectors.toList()); // ideally don't want this line
Run Code Online (Sandbox Code Playgroud)
如果没有 collect() 行,我不会填充地图,那么最简单的方法是什么,我尝试了 count() 而不是 collect ,但这完全是 zip 的快捷方式。或者是否有没有 Streams.zip 的更简单的单行解决方案来从两个列表填充地图?
我正在处理这个问题:
produto.setQuantidade(new Short("7"));
Run Code Online (Sandbox Code Playgroud)
Short显示已弃用,并带有标记。如何为以上 Java 9 版本更新此内容?(现在,我有 Java 11)
我认为Java编译器(Java 11)本身可以推断出实际的泛型类型,如果我给它足够的提示,例如当泛型类型是方法参数并且我作为参数提供实际类型的实例时.
例如,我有以下类:
public class Var<T>
{
public T value;
public Var(T value)
{
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我尝试以下3次尝试,我希望所有人都能编译:
//(1) Compilation error!
Var v = new Var(0);
++v.value;
//(2) Compilation error!
Var v = new Var<Integer>(0);
++v.value;
//(3) Compiles!
Var<Integer> v = new Var(0);
++v.value;
Run Code Online (Sandbox Code Playgroud)
1)我希望(1)编译,因为通过使用Integer(或int)参数,编译器知道实际类型可能就足够了.所以++v.value;我希望编译器知道变量是一个Integer,但事实并非如此.它仍然认为它是一个Object.
2)添加一些显式信息.但编译器仍然无法理解.
3)按预期编译.
然后,我尝试使用var关键字进行类型推断:
//(4) Compilation error!
var v = new Var(0);
++v.value;
//(5) Compiles!
var v = new Var<Integer>(0);
++v.value;
Run Code Online (Sandbox Code Playgroud)
4)同样,我希望(4)编译,因为类型可以从参数中推断出来. …
group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
Run Code Online (Sandbox Code Playgroud)
Sonar检测到这一点,因为中间流方法不应该被闲置主要bug
我必须处理一个关于在我的 mac 上安装 Java 的令人困惑的问题:
但是如果我java -version在终端中输入,我会得到
java version "14" 2020-03-17
Java(TM) SE Runtime Environment (build 14+36-1461)
Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
所以,似乎仍然安装了Java。
我的系统:macOS High Sierra 版本 10.13.6
如果可以x被 整除y,我想模式匹配,返回 true 但我似乎语法错误并且它一直崩溃。
def isDivisible (x: Int, y: Int) :Boolean = Int match {
case (x % y == 0) => true
case _ => false
}
isDivisible(10, 5)
Run Code Online (Sandbox Code Playgroud)
将方程作为个案的正确方法是什么
示例: 输入:abc565xyz 输出:16 哪种变体更好?谢谢。
public static int sumOfDigits(String s) {
return s.chars().filter(Character::isDigit).reduce(0, (i0, i1) -> i0 + Character.digit(i1, 10));
}
public static int sumOfDigits(String s) {
return s.chars().filter(Character::isDigit).mapToObj(a -> a - '0').reduce(0, (a, b) -> a + b);
}
public static int sumOfDigits(String s) {
return s.chars().filter(Character::isDigit).mapToObj(a -> Character.digit(a, 10)).reduce(0, Integer::sum);
}
Run Code Online (Sandbox Code Playgroud) 使用下面的代码,我可以复制二维数组,但是为什么我不需要在这里为 int[][]::new 指定数组大小?
int[][]source= {{0, 1, 0}, {0, 0, 1}, {1, 1, 1}, {0, 0, 0},{0, 0, 0}};
int[][] destination=Arrays.stream(source)
.map(a -> Arrays.copyOf(a, a.length))
.toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud) 我无法理解为什么BinaryOperator<Integer>可以A在下面的代码中放置在的位置,而不是BiFunction<Integer, Integer>?
A foo = (a, b) -> { return a * a + b * b; };
int bar = foo.apply(2, 3);
System.out.println(bar);
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我理解它。
假设列表firstName已被初始化。
List<String> firstName= new ArrayList<String>();
firstName.add("John");
firstName.add("Peter");
firstName.add("Foo");
Run Code Online (Sandbox Code Playgroud)
是否可以使用它在一行代码中填充另一个列表?我不知道如何在少于以下几行的情况下做到这一点:
List<FullName> fullName= new ArrayList<FullName>();
firstName.stream().forEach( n -> fullName.add(new FullName(n, "SomeSurname")));
Run Code Online (Sandbox Code Playgroud) lambda表达式可以替代吗?使用当前的代码,我无法访问变量maxCnt,对其进行修改并发送回使用。
int maxCnt = 0;
incoming.stream().forEach(a -> {
Integer cnt = wordFrequency.get(a);
if (cnt != null) {
if (cnt > maxCnt) {
maxCnt = cnt;
}
}
});
Run Code Online (Sandbox Code Playgroud) 我想还有另一种更优雅的方式来编写这段代码:
private boolean validateGicarHeaders(HttpServletRequest request) {
return null != Optional.ofNullable(
request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER))
.orElse(request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER));
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?