这段代码是线程安全的吗?
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不是一个线程安全的数据结构.
在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又一次地提供一个实例.
有可能避免这种重复性的工作吗?
当我查看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]?
我有一个问题,我认为这对溪流和/或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 应用程序中,一个重要的小功能是能够根据音频文件的元数据(例如专辑/艺术家 -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) 有没有人使用 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 工作正常。
如果有人对如何解决此问题有任何线索,我将不胜感激。我仍在尝试,如果我弄明白了,我会更新这篇文章。
提前致谢。
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)
[安全]是什么意思?
为什么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) 我试图使用Proguard(6.1.0beta1),但得到了
(Unsupported version number [55.0] (maximum 54.0, Java 10)))
Run Code Online (Sandbox Code Playgroud)
是否有ProGuard的替代品,可以使用Java 11进行管理?
有没有办法让Java类公开但只公开一个JAR文件?AKA,它不是私有包,而是公共包,但它不是公共JAR?
说我有这样的结构:
project/
package1/
One.java
package2/
Two.java
package3/
Three.java
Run Code Online (Sandbox Code Playgroud)
由于3 .java文件在不同的包中,我需要公开.但有没有办法让它们只对包含该项目的JAR公开?这样如果另一个项目导入JAR,它就看不到某些公共类/字段?