注意:这个问题源于一个死链接,这是以前的SO问题,但是这里......
看到这个代码(注意:我不知道,这个代码将不能"工作",而Integer::compare
应使用-我只是提取它从链接的问题):
final ArrayList <Integer> list
= IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList());
System.out.println(list.stream().max(Integer::max).get());
System.out.println(list.stream().min(Integer::min).get());
Run Code Online (Sandbox Code Playgroud)
据javadoc的.min()
和.max()
,两者的参数应该是一个Comparator
.然而,这里的方法引用是Integer
类的静态方法.
那么,为什么要编译呢?
这种方法BigInteger.isProbablePrime()
很奇怪; 从文档中,这将告诉一个数字是否是素数的概率1 - 1 / 2^arg
,其中arg
是整数参数.
它已经存在于JDK很长一段时间了,所以它意味着它必须有用.我在计算机科学和算法(以及数学)方面的有限知识告诉我,知道一个数字是否"可能"是一个素数而不是一个素数并不是真的有意义.
那么,人们想要使用这种方法的可能情况是什么?密码?
我打算将gradle的使用概括为我的项目,并希望在任何地方重用相同的构建文件.不幸的是,我在单个文件中尝试定义$ subject中提到的属性时遇到了麻烦,以便简化迁移.
这是gradle 1.6.
我尝试了什么,在所有尝试中都失败了:
gradle.properties
:无法修改名称(只读,必须使用settings.gradle
并覆盖根项目名称!); {source,target}Compatibility
没有考虑到;settings.gradle
:{source,target}Compatibility
没有考虑到!那么,实现这一目标的正确方法是什么?我到目前为止所做的尝试gradle.properties
:
group = something
name = whatever # cannot do!
version = whatever
sourceCompatibility = whatever # not taken into account!
Run Code Online (Sandbox Code Playgroud)
并在settings.gradle
:
sourceCompatibility = "whatever"; # not taken into account!
Run Code Online (Sandbox Code Playgroud)
编辑嗯,"名称"问题无法解决; 对于其余的,我使用了另一个我在构建文件中应用的文件."名称"处理真的不对:/
编辑2这是2014年和gradle 1.12,问题仍未解决......
虽然现在只有两天了,我肯定会在所有Java项目中使用gradle销售,并从我所有项目的根目录中删除pom.xml.
但是,我希望保持maven兼容,因为我希望gradle任务能够在用户需要时在项目的根目录下生成合适的pom.xml.
此时,我对pom.xml的唯一引用是在build.gradle文件的这一部分中(这是很少的修改,这里有什么):
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment);
}
repository(url: sonatypeRepoURI) {
authentication(userName: sonatypeUsername,
password: sonatypePassword);
}
pom.project {
name "${name}";
packaging "bundle";
description "${description}";
url "${projectURL}";
scm {
url "${gitroscm}";
connection "${gitroscm}";
developerConnection "${gitrwscm}";
}
licenses {
license {
name "Lesser General Public License, version 3 or greater";
url "http://www.gnu.org/licenses/lgpl.html";
distribution "repo";
}
}
developers {
developer {
id "whocares";
name "whocares";
email "whocares";
}
}
}
}
}
} …
Run Code Online (Sandbox Code Playgroud) 环境:Ubuntu x86_64(14.10),Oracle JDK 1.8u25
我尝试使用并行流Files.lines()
但我想要.skip()
第一行(它是带有标题的CSV文件).所以我试着这样做:
try (
final Stream<String> stream = Files.lines(thePath, StandardCharsets.UTF_8)
.skip(1L).parallel();
) {
// etc
}
Run Code Online (Sandbox Code Playgroud)
但是后来一列未能解析成一个int ...
所以我尝试了一些简单的代码.文件问题很简单:
$ cat info.csv
startDate;treeDepth;nrMatchers;nrLines;nrChars;nrCodePoints;nrNodes
1422758875023;34;54;151;4375;4375;27486
$
Run Code Online (Sandbox Code Playgroud)
代码同样简单:
public static void main(final String... args)
{
final Path path = Paths.get("/home/fge/tmp/dd/info.csv");
Files.lines(path, StandardCharsets.UTF_8).skip(1L).parallel()
.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
我系统地得到以下结果(好吧,我只运行了大约20次):
startDate;treeDepth;nrMatchers;nrLines;nrChars;nrCodePoints;nrNodes
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
编辑似乎问题或误解比这更根深蒂固(下面的两个例子是由FreeNode的## java编写的):
public static void main(final String... args)
{
new BufferedReader(new StringReader("Hello\nWorld")).lines()
.skip(1L).parallel()
.forEach(System.out::println);
final Iterator<String> iter
= Arrays.asList("Hello", "World").iterator();
final Spliterator<String> spliterator
= Spliterators.spliteratorUnknownSize(iter, …
Run Code Online (Sandbox Code Playgroud) javadoc .isAbsolute()
说:
判断此路径是否绝对.
绝对路径是完整的,因为它不需要与其他路径信息组合以便定位文件.返回:
true
if且仅当此路径是绝对路径时
javadoc .getRoot()
说:
以Path对象的形式返回此路径的根组件,如果此路径没有根组件,则返回null.
返回: 表示此路径的根组件的路径,或
null
好的,所以,我在这里不知所措; 有没有任何文件系统的路径可能是绝对没有根的路径?
编辑:请注意,可能存在具有根但不是绝对的路径.例如,这些在Windows系统上:
C:foo
;\foo\bar
.但我在这里要求反过来:没有根和绝对.
示例程序:
public final class CollectorTest
{
private CollectorTest()
{
}
private static <T> BinaryOperator<T> nope()
{
return (t, u) -> { throw new UnsupportedOperationException("nope"); };
}
public static void main(final String... args)
{
final Collector<Integer, ?, List<Integer>> c
= Collector.of(ArrayList::new, List::add, nope());
IntStream.range(0, 10_000_000).boxed().collect(c);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,为了简化这里的问题,没有最终的转换,因此生成的代码非常简单.
现在,IntStream.range()
生成一个顺序流.我只是将结果打成Integer
s然后我的设计Collector
将它们收集到一个List<Integer>
.很简单.
无论我运行多少次这个示例程序,UnsupportedOperationException
从不命中,这意味着我的虚拟组合器永远不会被调用.
我有点期待这个,但后来我已经误解了流,我不得不问这个问题......
可以在Collector
当流的组合曾经被称为保证是连续的?
我正在使用Guava的LoadingCache进入我的项目来处理线程(安全,友好)缓存加载,它运行得非常好.但是,存在限制.
定义缓存的当前代码如下所示:
cache = CacheBuilder.newBuilder().maximumSize(100L).build(new CacheLoader<K, V>()
{
// load() method implemented here
}
Run Code Online (Sandbox Code Playgroud)
我没有指定到期时间.
问题是根据密钥的值,某些相关值可能会过期而其他值可能不会过期.并且CacheLoader
不考虑这一点,如果您指定到期时间,则它适用于每个条目.
你会如何解决这个问题?
我是JooQ的忠实粉丝,不幸的是,自从3.3升级后,每次我的代码退出之前都会向控制台输出一条非常烦人的消息:
Feb 02, 2015 7:28:06 AM org.jooq.tools.JooqLogger info
INFO:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<snip>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Thank you for using jOOQ 3.5.1
Run Code Online (Sandbox Code Playgroud)
不幸的是,我根本无法删除此日志.
请注意,我不使用slf4j,也不使用log4j或任何日志API; 因此,我唯一可用的机制是jul
我试图使用它完全禁用它:
static {
Stream.of(Logger.getAnonymousLogger(), Logger.getGlobal(),
Logger.getLogger("org.jooq.tools.JooqLogger")
).forEach(l -> {
l.setLevel(Level.OFF);
final Handler[] handlers = l.getHandlers();
Arrays.stream(handlers).forEach(l::removeHandler);
});
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用,消息仍然出现.
如何在修改代码时使这条消息消失,我想避免在这里?
我是mockito的忠实粉丝,不幸的是,对于我使用Java 8的一个项目,它失败了...
场景:
public final class MockTest
{
@Test
public void testDefaultMethodsWithMocks()
{
final Foo foo = mock(Foo.class);
//when(foo.bar()).thenCallRealMethod();
assertThat(foo.bar()).isEqualTo(42);
}
@FunctionalInterface
private interface Foo
{
int foo();
default int bar()
{
return 42;
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,测试失败并foo.bar()
返回0.
当我取消注释该when()
行时,我得到一个堆栈跟踪...
java.lang.NoSuchMethodError: java.lang.Object.bar()I
at com.github.fge.lambdas.MockTest.testDefaultMethodsWithMocks(MockTest.java:18)
Run Code Online (Sandbox Code Playgroud)
这是maven上最新的稳定版本; 谷歌搜索周围没有告诉我关于Java 8中这个新功能的模拟状态...
你能否以其他方式使其工作,而不是实现接口和spy()
它们(这是有效的)?