小编Nam*_*man的帖子

如何找到键包含给定前缀的映射值的总和?

我有一个具有以下签名的方法:

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 表达式中的参数类型不兼容

我在这里做错了什么?

java java-stream

0
推荐指数
1
解决办法
77
查看次数

强制 Streams.zip 迭代每个元素的最佳方法是什么(使用 Guava、Java)

我正在尝试使用 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 的更简单的单行解决方案来从两个列表填充地图?

java hashmap guava java-stream

0
推荐指数
1
解决办法
73
查看次数

弃用的 Short(String) 如何更新?

我正在处理这个问题:

produto.setQuantidade(new Short("7"));
Run Code Online (Sandbox Code Playgroud)

Short显示已弃用,并带有标记。如何为以上 Java 9 版本更新此内容?(现在,我有 Java 11)

java short deprecated java-11

0
推荐指数
1
解决办法
76
查看次数

类型推断:泛型,"var"

我认为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)编译,因为类型可以从参数中推断出来. …

java generics type-inference java-10

-1
推荐指数
1
解决办法
138
查看次数

Java 8流修复中间流方法不应该留下未使用的声纳问题

 group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
            map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
Run Code Online (Sandbox Code Playgroud)

Sonar检测到这一点,因为中间流方法不应该被闲置主要bug

java java-8 java-stream sonarqube

-1
推荐指数
1
解决办法
280
查看次数

Java 符号不再出现在系统首选项中,但仍被安装

我必须处理一个关于在我的 mac 上安装 Java 的令人困惑的问题:

  • 如果我转到系统首选项,则不再有 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

java macos java-14

-1
推荐指数
1
解决办法
121
查看次数

Scala 模式匹配方程大小写

如果可以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)

将方程作为个案的正确方法是什么

jvm functional-programming scala switch-statement

-1
推荐指数
1
解决办法
110
查看次数

Java:使用流对字符串进行数字求和

示例: 输入: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)

java character java-stream

-1
推荐指数
1
解决办法
495
查看次数

java8 stream toArray 问题 - 为什么我不需要在这里为 int[][]::new 指定数组大小?

使用下面的代码,我可以复制二维数组,但是为什么我不需要在这里为 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)

java java-stream

-1
推荐指数
1
解决办法
64
查看次数

BiFunction&lt;X, X&gt; 和 BinaryOperator&lt;X&gt; 的区别

我无法理解为什么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)

有人可以帮助我理解它。

java java-8 java-stream functional-interface

-2
推荐指数
1
解决办法
1072
查看次数

是否可以仅在一行中执行此操作?

假设列表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)

java java-8 java-stream

-2
推荐指数
1
解决办法
48
查看次数

替代lambda

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)

java lambda java-stream

-2
推荐指数
1
解决办法
86
查看次数

Java可选:检查几种替代方案(代码更优雅)

我想还有另一种更优雅的方式来编写这段代码:

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)

有任何想法吗?

java option-type

-3
推荐指数
1
解决办法
835
查看次数