我有一个包含一些User对象的列表,我正在尝试对列表进行排序,但只能使用方法引用,使用lambda表达式,编译器会给出错误:
List<User> userList = Arrays.asList(u1, u2, u3);
userList.sort(Comparator.comparing(u -> u.getName())); // works
userList.sort(Comparator.comparing(User::getName).reversed()); // works
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
Run Code Online (Sandbox Code Playgroud)
错误:
com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol
userList.sort(Comparator.comparing(u -> u.getName()).reversed());
^
symbol: method getName()
location: variable u of type Object
1 error
Run Code Online (Sandbox Code Playgroud) 我已经看到这样的功能存在BigInteger,即BigInteger#gcd.Java中是否还有其他函数适用于其他类型(int,long或Integer)?这似乎是有意义的java.lang.Math.gcd(有各种各样的重载),但它不存在.它在别的地方吗?
(请不要将此问题与"我如何自己实施"这一问题混淆,请!)
令我感到惊讶的是,本来应该是一项非常轻松的工作对我来说是一项非常烦人的任务.我需要的是将几个命令行参数传递给我的maven exec:exec插件.不幸的是,几个小时的谷歌搜索根本没有帮助.
这是我的插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>-javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar</argument>
<argument>-Xmx256m</argument>
<argument>com.myPackage.Myclass</argument>
</arguments>
</configuration>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
现在从命令提示符我输入
mvn exec:exec -Dexec.args=-Dmy.property=myProperty
Run Code Online (Sandbox Code Playgroud)
我也试过了
mvn exec:exec -Dexec.arguments=-Dmy.property=myProperty
Run Code Online (Sandbox Code Playgroud)
还有很多其他的东西.但似乎没有任何工作.我知道exec:exec运行在一个单独的VM中,但根据文档-Dexec.args应该适合我.有人可以建议我哪里出错了???
我对JDK7中所有这些新的File I/O类感到困惑.
让我们说,我有一个,Path并希望重命名该文件,它代表.
如何再次Path预期时,如何指定新名称?
Path p = /* path to /home/me/file123 */;
Path name = p.getName(); /* gives me file123 */
name.moveTo(/* what now? */); /* how to rename file123 to file456? */
Run Code Online (Sandbox Code Playgroud)
注意:为什么我需要JDK7?处理符号链接!
问题是:我必须使用文件,在运行时已知名称和位置.所以,我需要的是一种安全的方法(没有特殊的副作用)来创建一个新名称-Path一些旧名称Path.
Path newName(Path oldName, String newNameString){
/* magic */
}
Run Code Online (Sandbox Code Playgroud) 我试图在我最新的Android项目(SDK9)中使用复数.它始终以ResourcesNotFoundException结尾.但资源就在那里 - 绝对:
这是我的strings.xml的一部分:
<plurals name="count_files">
<item quantity="one">%d file</item>
<item quantity="other">%d files</item>
<item quantity="zero">%d files</item>
</plurals>
<plurals name="count_folders">
<item quantity="one">%d folder</item>
<item quantity="other">%d folders</item>
<item quantity="zero">%d folders</item>
</plurals>
Run Code Online (Sandbox Code Playgroud)
这是使用它的部分:
textView.setText(
getResources().getQuantityString(R.plurals.count_folders, countfolders, countfolders)
+ ", "
+ getResources().getQuantityString(R.plurals.count_files, countfiles, countfiles));
Run Code Online (Sandbox Code Playgroud)
这是例外:
android.content.res.Resources$NotFoundException: Plural resource ID #0x7f050001 quantity=0 item=other
我必须保持多达15种不同的语言,因此我需要文本和复数的本地化.
知道我的代码有什么问题吗?
提前谢谢了.
我有以下XML标记
<list message="2 < 3">
Run Code Online (Sandbox Code Playgroud)
我想用<文本替换<
<如果它没有出现在行首,则需要正则表达式匹配.
我遇到了一个我不明白的类加载器问题.我在使用Java 1.6.0和Windows XP的OSX上看到过相同的行为.
当我使用MyListener而MyObject不是在类路径中运行以下代码时,我得到了一个NoClassDefFoundError.但是,如果我删除该MyObject.add(my)行或替换它,MyObject.add(null)那么代码运行正常.
请注意,实际上从未使用过具有无法解析的依赖项的方法.
我不明白为什么MyObject.add(my)导致VM尝试加载MyListener但MyListener my = new MyListener(){};不会.
public class Main {
public void neverCalled(){
MyListener my = new MyListener(){};
MyObject.add(my);
}
public static void sayHi(){
System.out.println("Hello");
}
public static void main(String[] args) {
System.out.println("Starting...");
sayHi();
}
}
Run Code Online (Sandbox Code Playgroud)
没有什么有趣的MyObject和MyListener:
public class MyObject {
public static void add(MyListener in){}
}
public interface MyListener {}
Run Code Online (Sandbox Code Playgroud)
我根据下面的标准提供的信息做了一些额外的研究.显然,由于一些未知的原因,使用参数进行方法调用似乎会导致加载参数类,而仅仅声明变量不会.
Java VM Spec的第2.17.1节第2版说:
关于何时执行解析的唯一要求是, …
有没有办法知道我的改装电话何时完成了它的职责?我知道什么时候收到所有数据,所以代码可以继续,比如开始另一个活动或者使用第一次调用的数据做一秒钟?
Ps.:我正在使用异步请求(.enqueue).
编辑:
getContact(){
//Get a contact List from the server
Call<List<ModelContact>> callM = contactInterface.createRContact(listContact);
callM.enqueue(new Callback<List<ModelContact>>() {
@Override
public void onResponse(Response<List<ModelContact>> response, Retrofit retrofit) {
// Fetch the List from Response and save it on the local database
}
@Override
public void onFailure(Throwable t) {
Log.i("TAG", "Error: " + t.getMessage());
}
});
//Gets a object containing some configurations
Call<Configs> callC = contactInterface.getConfigs(Configs);
callC.enqueue(new Callback<Configs>() {
@Override
public void onResponse(Response<Configs> response, Retrofit retrofit) {
// Fetch the Configs object and …Run Code Online (Sandbox Code Playgroud) 在Tomcat中,我们可以这样做:
<Context useHttpOnly="true" sessionCookiePath="/"sessionCookieDomain=".XXXX.com"/>
Run Code Online (Sandbox Code Playgroud)
我想用Spring Boot分享二级域名的cookie,怎么做?
在我们的服务器上,我们开始遇到问题OutOfMemoryError.我们使用Eclipse Memory Analysis分析了堆转储,并发现许多对象都要进行最终化(约占堆的2/3):

我们发现,它可能是一些finalize()方法阻塞.我发现了几个关于这个问题的bug报告(这里或这里),它总是在Finalizer线程堆栈中表现出来,它在某个地方被阻塞了.但在我们的例子中,这个帖子是WAITING:
"Finalizer" daemon prio=10 tid=0x43e1e000 nid=0x3ff in Object.wait() [0x43dfe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x4fe053e8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
- locked <0x4fe053e8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189)
Run Code Online (Sandbox Code Playgroud)
编辑:
然后我们尝试添加-XX:+UseConcMarkSweepGC,但没有成功,只有OutOfMemoryErrors 的频率减少,所以我们首先认为它有所帮助.
最后,我们怀疑JVM错误并从OpenJDK 1.6.0_30升级到Oracle JDK 1.7.0_51,问题消失了(至少看起来如此,在过去4小时内使用的堆没有增长).我们不记得finalize方法有任何变化,我们也没有升级任何库,在那段时间里只有很小的发展.问题不会在我们的测试服务器上重现,具有相同的配置,除了它是64位JVM而生产服务器是32位.
问题是:什么可能是对象没有最终确定和Finalizer线程等待下一个对象的原因?我们是否正确分析了堆转储?
谢谢你的所有答案.
java ×5
android ×2
api ×1
classloader ×1
file-io ×1
finalize ×1
java-7 ×1
java-8 ×1
jsessionid ×1
lambda ×1
maven-plugin ×1
nio ×1
path ×1
plural ×1
regex ×1
resources ×1
retrofit ×1
retrofit2 ×1
spring-boot ×1
web-services ×1