java - 将 arraylist 划分为 Map 存储桶

标签 java lambda java-8

我有两个 String 类型的 ArrayList ArrayList<String> xListArrayList<String> yList我想根据 someAttribute 将一个列表划分为多个存储桶(对于下面的示例,假设它使用 .contains()。

   Map<String, List<String>> yBuckets = new HashMap<>();
             yList.forEach(y -> yBuckets.compute(y.contains("I'm here"), (k,v) ->
                     (v == null ? new ArrayList<>() : v).add(y)));

但是我遇到了不兼容的类型错误(字符串无法转换为 boolean 值)。到目前为止,我从未真正使用过 Java 8,但它似乎对我想要的东西很有用,所以我想知道是否有人能够告诉我如何修复此代码。 谢谢

最佳答案

如果您想使用 lambda,您可以使用 toMap 收集器之一:

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#mapping-java.util.function.Function-java.util.stream.Collector-

例如,按姓氏将名称列表分区到存储桶中:

    List<String> names = Arrays.asList("Steve Ray", "Bobby Ray", "Billy Bob", "Timmy Bob");
    Map<String, List<String>> nameBuckets = names.stream().collect(
            Collectors.groupingBy(str -> {return str.split(" ")[1];}, Collectors.toList()));

关于java - 将 arraylist 划分为 Map 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47359276/

相关文章:

java - 接受 apache poi 中的非负浮点值

java - 通过正则表达式切割文本

java - 在 macOS 上通过 brew 安装 JRE(但不是 JDK)

function - Scala中有lambda函数吗?

java - Java 作用域中的异步 lambda 如何处理局部变量

java - Arrays.asList(word.toCharArray()) 不返回列表?

java - 是否有更优雅的方法来从流中选择 max 或 min 方法?

java - 表中的 LibGDX 按钮超出屏幕

java - 异常原因 java.lang.VerifyError : Bad type on operand stack

java - 将子类型中类型参数的注释链接到父类(super class)型中声明类型参数