小编Zhe*_*lov的帖子

RxJava线程安全

这段代码是线程安全的吗?

Observable<String> observable = ... // some observable that calls
                                    // onNext from a background thread

observable
  .scan(new ArrayList<String>(), (List<String> acc, String next) -> {
    acc.add(next);
    return acc;
  })
  .subscribe( list -> {
    // do somethind with sequence of lists
    ...
  });
Run Code Online (Sandbox Code Playgroud)

我很好奇,因为ArrayList不是一个线程安全的数据结构.

java multithreading thread-safety rx-java

9
推荐指数
1
解决办法
2002
查看次数

我可以自动实现课程吗?

在Scalaz中,每个Monad实例都自动成为Applicative.

implicit val listInstance = new Monad[List] {
  def point[A](a: => A) = List(a)
  def bind[A, B](fa: List[A])(f: A => List[B]) = fa flatMap f
}

List(2) <*> List((x: Int) => x + 1) // Works!
Run Code Online (Sandbox Code Playgroud)

另一个例子:Arrow是自动的Profunctor.

但是,在Haskell中,我必须Applicative一次Monad又一次地提供一个实例.

有可能避免这种重复性的工作吗?

haskell scalaz

9
推荐指数
1
解决办法
183
查看次数

什么是Scalaz的Tower [A]和IvoryTower?

当我查看scalaz.effect.IO源代码时,我注意到它有一个apply带有以下签名的方法:

sealed trait IO[A] {
  def apply(rw: Tower[IvoryTower]): Trampoline[(Tower[IvoryTower], A)]
}
Run Code Online (Sandbox Code Playgroud)

Tower[A]IvoryTower定义为:

case class Tower[A]()
sealed trait IvoryTower
Run Code Online (Sandbox Code Playgroud)

有一个例子Tower:

object IvoryTower extends IvoryTowers

trait IvoryTowers {
  val ivoryTower = Tower[IvoryTower]()
}
Run Code Online (Sandbox Code Playgroud)

这些课程的目的是什么?为什么IO.apply接受类型的参数Tower[IvoryTower]

scala scalaz io-monad

8
推荐指数
1
解决办法
198
查看次数

使用lambdas的List <>的Java8子列表

我有一个问题,我认为这对溪流和/或lambdas来说是完美的.另一方面,我不想过度复杂化,但由于将在许多变体中使用这种特定技术(在子列表上运行函数),我想要一些关于如何从一开始就做到正确的想法.

我有一个List<Product> productList.

我希望能够遍历所有子列表productList.例如,大小= 30的所有子列表.然后,该子列表应该用作函数的参数.

这是我现在的,天真的解决方案:

List<Product> products=...
// This example uses sublists of size 30
for (int i = 0; i < products.size() - 29; i++) {
    // sublist start index is inclusive, but end index is exclusive
    List<Product> sublist = products.subList(i, i + 30);
    Double res = calc(sublist);
}

// an example of a function would be moving average
Run Code Online (Sandbox Code Playgroud)

如何使用lambdas实现?

编辑我试图用最简单的例子来说明问题.经过一些评论,我意识到一个完美的例子是计算移动平均线.第一个MAVG在子列表[0..29]上计算,第二个在[1..30]上计算,第三个在[2..31]上计算,依此类推.

java lambda list java-8 java-stream

8
推荐指数
2
解决办法
1万
查看次数

如何在 Java 15 以后继续使用 Javascript

在我的 Java 应用程序中,一个重要的小功能是能够根据音频文件的元数据(例如专辑/艺术家 -title)重命名音频文件,并且使用Javascript指定掩码,这使得重命名功能非常灵活和强大。

我知道 Javascript 已被弃用,但现在看来它实际上将从 Java 15 中删除。这种功能的丢失对我来说可能是一个主要问题,所以我问,即使它被正式删除,我是否可以继续在 Java 15 应用程序中使用 Javascript,即它是否可以作为 opensrc 插件使用,我可以在我自己的风险。开发在 Ecmascript 5.1 停止的事实对我来说不是一个主要问题。

有人提到使用GraalVM,但没有解释如何执行此操作,我认为这不适合我的场景,特别是我的应用程序可用于某些 32 位Arm环境,而 GraalVM 不可用于 32 位。

我已经从 Java 11 转移到 Java 14 以解决其他一些问题,所以我不能真正回到 Java 11,而且由于 Java 14 不是LTS版本,我不能真正坚持使用 Java 14 很长一段时间。

这是我的大部分 Javascript 代码

try
{
    mask = includeUserDefinedFunctions(mask);
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    for(SongFieldName next:SongFieldName.values())
    {
        if(next.getScriptVar()!=null && next.getSongFieldKey()!=null)
        {  
            engine.put(next.getScriptVar(), cleanValue(song.getFieldValueSpaceSeparatedOrEmptyString(next.getSongFieldKey()), song));
        }
    }
    String result = (String)engine.eval(mask);
    return result;
} …
Run Code Online (Sandbox Code Playgroud)

java nashorn java-14 java-15

8
推荐指数
2
解决办法
1824
查看次数

IntelliJ JDK 16 Early Access - 成功了吗?工具.jar

有没有人使用 JDK 16 ( https://jdk.java.net/16/ ) 早期访问构建与 IntelliJ取得了任何成功?

我可以使用 JDK 15 早期访问版本,但是当我尝试 JDK 16 时,我收到一条错误消息:

Error: Cannot determine path to 'tools.jar' library for 16 (path/to/jdk-16)
Run Code Online (Sandbox Code Playgroud)

我所做的所有研究都表明 JDK 将 tools.jar 存储在 path/to/jdk-16/lib 文件夹中。问题是,tools.jar 也不在 JDK 15 包中,但 JDK 15 工作正常。

如果有人对如何解决此问题有任何线索,我将不胜感激。我仍在尝试,如果我弄明白了,我会更新这篇文章。

提前致谢。

java intellij-idea java-16

8
推荐指数
1
解决办法
5332
查看次数

什么[安全]标记在ghci中意味着什么?

Prelude Data.Void> :info Void
data Void       -- Defined in `Data.Void'
instance [safe] Eq Void -- Defined in `Data.Void'
instance [safe] Ord Void -- Defined in `Data.Void'
instance [safe] Read Void -- Defined in `Data.Void'
instance [safe] Show Void -- Defined in `Data.Void'
Run Code Online (Sandbox Code Playgroud)

[安全]是什么意思?

haskell ghci

7
推荐指数
1
解决办法
249
查看次数

Java 9中java.se模块的意义是什么?

为什么java 9模块系统具有java.se模块,该模块对其他模块具有传递依赖性.在Java 9之前的世界中依赖于整个rt.jar是不一样的.

module java.se {
    requires transitive java.desktop;
    requires transitive java.security.jgss;
    requires transitive java.security.sasl;
    requires transitive java.management;
    requires transitive java.logging;
    requires transitive java.datatransfer;
    requires transitive java.sql.rowset;
    requires transitive java.compiler;
    requires transitive java.sql;
    requires transitive java.naming;
    requires transitive java.prefs;
    requires transitive java.rmi;
    requires transitive java.xml.crypto;
    requires transitive java.management.rmi;
    requires transitive java.xml;
    requires transitive java.scripting;
    requires transitive java.instrument;
}
Run Code Online (Sandbox Code Playgroud)

java java-platform-module-system java-9

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

ProGuard是否支持Java 11?

我试图使用Proguard(6.1.0beta1),但得到了

(Unsupported version number [55.0] (maximum 54.0, Java 10)))
Run Code Online (Sandbox Code Playgroud)

是否有ProGuard的替代品,可以使用Java 11进行管理?

java proguard

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

使类公开,但对JAR文件保持私有

有没有办法让Java类公开但只公开一个JAR文件?AKA,它不是私有包,而是公共包,但它不是公共JAR?

说我有这样的结构:

project/
  package1/
    One.java
  package2/
    Two.java
  package3/
    Three.java
Run Code Online (Sandbox Code Playgroud)

由于3 .java文件在不同的包中,我需要公开.但有没有办法让它们只对包含该项目的JAR公开?这样如果另一个项目导入JAR,它就看不到某些公共类/字段?

java maven java-platform-module-system java-11

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