使用Java 8流时,采用列表,从中创建流,执行业务并将其转换回来是很常见的.就像是:
Stream.of(-2,1,2,-5)
.filter(n -> n > 0)
.map(n -> n * n)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
为什么' .collect(Collectors.toList())'部分没有捷径/方便的方法?在Stream接口上,有将方法转换为数组的方法toArray(),为什么toList()缺少?
恕我直言,将结果转换为列表比数组更常见.我可以忍受这一点,但称这种丑陋是令人讨厌的.
有任何想法吗?
如何在Linux中配置命令提示符以显示当前目录?我希望能够在.zshrc文件中设置此设置.
我想确保生成的zip文件的文件大小不超过400 MB,所以我创建了这个规则:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-file-size</id>
<goals>
<goal>enforce-once</goal>
</goals>
<configuration>
<rules>
<requireFilesSize>
<maxsize>419430400</maxsize> <!-- the final zip should not exceed 400 MB -->
<files>
<file>${project.build.outputDirectory}.zip</file>
</files>
</requireFilesSize>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是,mvn enforcer默认绑定到validate阶段,不幸的是此时文件不存在.zip文件由绑定到generate-resourcesmvn阶段的ant任务生成.
题
有没有办法让mvn enforcer运行generate-resources?换句话说,如何验证构建后置条件而不是预先条件?
有没有办法说(以编程方式,我的意思是他们的API)谷歌URL缩短器不生成短的URL与字符,如:
0 O
1 l
因为人们在从显示器读取这些字符并在其他地方键入它们时经常会出错.
通过反射调用构造函数的速度有多少,例如:
Class c = map.get("somestr");
Constructor t = c.getDeclaredConstructor(int.class,MyClass.class);
MyObject o = (MyObject)t.invoke(<params>);
or
Constructor t = map.get("somestr");
MyObject o = (MyObject)t.invoke(<params>);
Run Code Online (Sandbox Code Playgroud)
比使用关键字new?
假设该类将被缓存.
我希望在 Scala 中设计一个 DSL,它的语法可能最少。它旨在供不了解 Scala 但可以利用 Scala 类型系统进行验证和错误检查的用户使用。在我的脑海中,DSL 是这样的:
outer {
inner(id = "asdf") {
value("v1")
value("v2")
}
}
Run Code Online (Sandbox Code Playgroud)
这个剪断应该产生一个这样的值:
Outer(Inner("asdf", Value("v1") :: Value("v2") :: Nil))
Run Code Online (Sandbox Code Playgroud)
给定数据结构
case class Outer(inner: Inner)
case class Inner(values: List[Value])
case class Value(value: String)
Run Code Online (Sandbox Code Playgroud)
这个想法是inner函数只在闭包之后可用outer,value函数只在闭包之后可用inner,等等。这就是以下不会编译:outer { value("1") }。
我怎样才能实现这样的事情?最后,数据结构不需要是不可变的,只要它是强类型的,它就可以是任何东西。
我对 Scala 宏不熟悉,但我可以用宏来解决这个问题吗?
到目前为止,我最接近的是以下实现:
object DSL extends App {
def outer = new Outer()
class Outer(val values: mutable.MutableList[Inner] = mutable.MutableList.empty) {
def inner(id: String): Inner = …Run Code Online (Sandbox Code Playgroud) 我有以下代码
int a = 01111;
System.out.println("output1 = " + a);
System.out.println("output2 = " + Integer.toOctalString(1111));
Run Code Online (Sandbox Code Playgroud)
和输出是
Run Code Online (Sandbox Code Playgroud)output1 = 585 output2 = 2127
我期待输出如下所示。
Run Code Online (Sandbox Code Playgroud)output1 = 2127 output2 = 2127
为什么585当我打印直接 int 值时它会给出?我期待java自动将前导零的值转换为八进制。
01111和之间是什么关系585?
有什么方法可以将命令作为多行命令保存到bash历史记录中,然后向上和向下导航以进行一些编辑并再次运行?
$ shopt -s cmdhist
$ shopt -s lithist
$ echo "1"\
&& echo "2"\
&& echo "3"
Run Code Online (Sandbox Code Playgroud)
现在,如果我按向上箭头,我想看看
$ echo "1"\
&& echo "2"\
&& echo "3"
Run Code Online (Sandbox Code Playgroud)
..again,但庆典给我echo "1"&& echo "2"&& echo "3"。即尽管设置了cmdhist和lithist标志,但它删除了新行。
如果向上箭头起作用并显示了多行命令,如何在其中上下导航?
try-with-resource构造的优先规则是什么?这是一个例子(注意:所有提到的类都实现Closeable):
try (Page closeablePage = page;
PipedOutputStream out = outs;
SequenceWriter sequenceWriter = mapper.writer().writeValuesAsArray(out)) {
// do stuff
} finally {
callback.run();
}
Run Code Online (Sandbox Code Playgroud)
回调何时运行?我的假设是:
SequenceWriterPipedOutputStreamPage我错了吗?
java ×4
java-8 ×2
bash ×1
dsl ×1
google-api ×1
java-stream ×1
linux ×1
maven ×1
maven-plugin ×1
monads ×1
performance ×1
reflection ×1
scala ×1
zsh ×1