小编The*_*ice的帖子

CompletableFuture runAsync 与新线程

语境:我读过这个SO线程讨论CompletableFuture和线程之间的差异。

但我试图了解何时应该使用 new Thread() 而不是 runAsync()。

我知道 runAsyn() 对于短/一次性并行任务更有效,因为我的程序可能会避免创建全新线程的开销,但我是否也应该考虑它用于长时间运行的操作?

在考虑使用一个而不是另一个之前,我应该了解哪些因素?

谢谢大家。

java concurrency multithreading asynchronous java-8

7
推荐指数
2
解决办法
6081
查看次数

使用收集器执行flatMap操作

我想了解flatMap使用Collectors 执行一段时间的方法.这是一个例子.

场景:

我有以下接口:

interface Ic {
    //empty
}

interface Ib {
    Stream<Ic> getCs();
}

interface Ia {
    String getName();
    Stream<Ib> getBs();
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现以下方法:

Map<String, Long> total_of_C_per_A (Stream<Ia> streamOfA) {
   return streamOfA.collect(groupBy(Ia::getName, ???));
}
Run Code Online (Sandbox Code Playgroud)

分类功能相当straitforward,我的问题是与下游收集器.我需要计算与"A"相关的"C"数.

我试图:

如果我想简单地返回计数而不创建地图,我会这样做:

streamOfA
  .flatMap(Ia::getBs)
  .flatMap(Ib::getCs)
  .count();
Run Code Online (Sandbox Code Playgroud)

但是这个Collectors类只允许我做映射操作.我还能尝试做些什么?

谢谢.

java java-8 java-stream

5
推荐指数
2
解决办法
353
查看次数

在 C# 中返回“函数式接口”

首先我想说我有一些 Java 背景,我现在正在学习 C#。

我有以下界面:

interface IComparer<T> {
  bool Equals(T a, T b)
}
Run Code Online (Sandbox Code Playgroud)

我想实现以下方法:

static IComparer<T> Compare(...) { }
Run Code Online (Sandbox Code Playgroud)

如果这是 Java,我将简单地返回一个实现自定义方法的 lambda 表达式,该方法接收两个T,并返回一个bool,但这在 C# 中无效。

有没有办法解决这个问题而不必创建一个实现的新类IComparer

PS:我不想使用实现“Equals”方法的 C# 库中的任何东西,我知道它存在,我只想了解如何在 C# 中从 Java 返回诸如“功能接口”之类的东西。

谢谢。

c#

5
推荐指数
2
解决办法
2260
查看次数