小编Oli*_*liv的帖子

Comparator.reversed()不使用lambda进行编译

我有一个包含一些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)

java lambda java-8 method-reference

101
推荐指数
3
解决办法
2万
查看次数

Java:得到最大的公约数

我已经看到这样的功能存在BigInteger,即BigInteger#gcd.Java中是否还有其他函数适用于其他类型(int,longInteger)?这似乎是有意义的java.lang.Math.gcd(有各种各样的重载),但它不存在.它在别的地方吗?


(请不要将此问题与"我如何自己实施"这一问题混淆,请!)

java greatest-common-divisor

78
推荐指数
8
解决办法
19万
查看次数

在mvn exec:exec中传递命令行参数

令我感到惊讶的是,本来应该是一项非常轻松的工作对我来说是一项非常烦人的任务.我需要的是将几个命令行参数传递给我的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应该适合我.有人可以建议我哪里出错了???

maven-plugin

29
推荐指数
3
解决办法
4万
查看次数

如何在JDK7中重命名(不移动)文件?

我对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)

java file-io nio path java-7

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

使用Plurals在ResourcesNotFoundException中结束

我试图在我最新的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种不同的语言,因此我需要文本和复数的本地化.

知道我的代码有什么问题吗?

提前谢谢了.

resources android plural

18
推荐指数
1
解决办法
3222
查看次数

正则表达式匹配不开始行

我有以下XML标记

<list message="2 < 3">
Run Code Online (Sandbox Code Playgroud)

我想用<文本替换&lt;

<如果它没有出现在行首,则需要正则表达式匹配.

regex

14
推荐指数
3
解决办法
2万
查看次数

Java VM何时尝试加载Class依赖项?

我遇到了一个我不明白的类加载器问题.我在使用Java 1.6.0和Windows XP的OSX上看到过相同的行为.

当我使用MyListenerMyObject不是在类路径中运行以下代码时,我得到了一个NoClassDefFoundError.但是,如果我删除该MyObject.add(my)行或替换它,MyObject.add(null)那么代码运行正常.

请注意,实际上从未使用过具有无法解析的依赖项的方法.

我不明白为什么MyObject.add(my)导致VM尝试加载MyListenerMyListener 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)

没有什么有趣的MyObjectMyListener:

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版说:

关于何时执行解析的唯一要求是, …

java classloader

10
推荐指数
1
解决办法
1654
查看次数

如何知道改装调用何时完成

有没有办法知道我的改装电话何时完成了它的职责?我知道什么时候收到所有数据,所以代码可以继续,比如开始另一个活动或者使用第一次调用的数据做一秒钟?

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)

api android web-services retrofit retrofit2

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

如何使用Spring启动设置cookie域和路径

在Tomcat中,我们可以这样做:

<Context useHttpOnly="true" sessionCookiePath="/"sessionCookieDomain=".XXXX.com"/>
Run Code Online (Sandbox Code Playgroud)

我想用Spring Boot分享二级域名的cookie,怎么做?

jsessionid spring-boot

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

对象没有最终确定,Finalizer线程没有做任何事情

在我们的服务器上,我们开始遇到问题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 garbage-collection finalize out-of-memory

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