小编Eug*_*vin的帖子

Collections.sort()throws比较方法违反了它的一般合同!例外

我正在尝试对List <>对象进行排序,并且抛出此异常(仅适用于大型列表)

排序代码:

List<FinalSentence> sentenceList = finalRepresentation.getSentences();
Collections.sort(sentenceList); // <=== EXCEPTION THROWN HERE!!!
Run Code Online (Sandbox Code Playgroud)

FinalSentence类头:

public class FinalSentence implements Comparable<FinalSentence>{...}
Run Code Online (Sandbox Code Playgroud)

compareTo()实现:

@Override
public int compareTo(FinalSentence o) {
    if (this == o) {
        return 0;
    }
    if (this.score > o.score) {
        return 1;
    }
    if (this.score < o.score) {
        return -1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是例外:

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(Unknown Source)
at java.util.ComparableTimSort.mergeAt(Unknown Source)
at java.util.ComparableTimSort.mergeCollapse(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java sorting collections exception

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

在Claimsnet core 1应用程序的逻辑层中获取ClaimsPrincipal

我正在编写一个aspnet核心1应用程序.使用承载令牌认证我在控制器内具有正确标识的User属性.但是我似乎找不到像使用ClaimPrincipal.Current静态之前那样抓住身份的方法.目前最好的做法是将这些数据放在BL层中而不传递ClaimPrincipal对象?

.net asp.net

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

Java 8收集器API

这个问题涉及使用java 8收集器对元素进行映射和分组.我有一份患者名单.每位患者都有他访问过的部门列表.假设我想为每个部门计算在Java 8中使用新的收集器API访问了多少时间,我将如何按部门列表进行分组?

谢谢!

注意:我知道我可以在每个部门放置一个计数器,这个问题仅仅是为了学习新的java 8功能.

码:

public class Patient {
    private String id;
    private List<Department> history;
    /* some more getters/setters come here */
}
Run Code Online (Sandbox Code Playgroud)

在我的主要方法中,我有一份患者名单.我想知道每个部门,访问了多少时间,没有编辑部门类(或扩展或装饰它).

我想我必须接受一批患者并将他们映射到dept-> count的地图(每个患者访问哪个部门的次数).拥有这些地图的流 - 我不知道如何分组这些地图并计算它们.

java mapping java-8 collectors

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

带有Task.Result的线程池死锁

我们在asp.net系统上拥有大量遗产,我们已经开始使用无法更改的基础结构库中的一些异步方法。系统在大多数地方不使用任务,但是基础架构仅公开异步方法。

在代码中,我们使用以下模式使用异步方法:

Task.Run(() => Foo()).Result

如果代码中有人不使用ConfigureAwait(false),我们将使用Task.Run来防止死锁。人们可能错过了很多地方,而且以前发生过很多事情。然后,我们使用Task.Result将其与现有的同步代码库集成。

在经历了沉重的负载之后,我们注意到我们正在超时,但是服务器没有做任何工作(CPU不足),我们发现当对服务器的调用很多并且线程池达到最大时,线程数在Task.Task中达到死锁,因为它阻塞线程,直到任务完成,但由于没有可用的线程池线程来运行任务,因此任务无法运行。

最好的解决方案是将代码更改为一路异步工作,但这不是当前的选择。同样,删除Task.Run也可以工作,但是这样做的风险太大,因为没有足够的测试覆盖率来知道我们不会在未经测试的流中造成新的死锁。

我试图实现一个新的任务计划程序,该计划程序将不使用线程池,而是使用一组不同的线程来运行Foo任务,但是内部任务正在我不想替换的默认任务计划程序上执行。

有什么想法可以在不对代码库进行巨大更改的情况下解决该问题?

这是一个小型示例应用程序,仅使用10个线程而不是实际限制来重现该问题。在示例Foo中将永远不会被调用。

class Program
{
    static void Main(string[] args)
    {
        ThreadPool.SetMaxThreads(10, 10);
        ThreadPool.SetMinThreads(10, 10);

        for (int i = 0; i < 10; i++)
        {
            ThreadPool.QueueUserWorkItem(CallBack);
        }

        Console.ReadKey();
    }

    private static void CallBack(object state)
    {
        Thread.Sleep(1000);

        var result = Task.Run(() => Foo()).Result;
    }

    public static async Task<string> Foo()
    {
        await Task.Delay(100);
        return "";
    }
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading deadlock task threadpool

6
推荐指数
1
解决办法
953
查看次数

指定的孩子已经是父母

这个问题已在这里被多次提出,但我找不到任何帮助.我正在编写一个Android应用程序,似乎在ActionBar上创建选项卡时遇到问题.我一直在寻找问题几个小时似乎无法找到解决方案,但我认为我确实找到了源.我甚至已经清空了实现只是为了获得一些结果并在它们的基础上构建,但是我没有发现任何东西.

这是创建选项卡片段并插入操作栏

    // put ActionBar to nav. mode
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // init "YES" tab
    Fragment yesTabFragment = Fragment.instantiate(this, YesTabFragment.class.getName());
    FlowTabListener yesTabListener = new FlowTabListener(yesTabFragment);
    ActionBar.Tab yesTab = actionBar.newTab().setText("YES").setTabListener(yesTabListener);
    actionBar.addTab(yesTab);
Run Code Online (Sandbox Code Playgroud)

这是该类的onCreateView方法

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    _fragmentView =  inflater.inflate(R.layout.yes_fragment, container);    
}
Run Code Online (Sandbox Code Playgroud)

这是片段XML布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical" >

    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,实现是空的,我没有在这段时间之前(而不是之后)实例化这个片段但是我得到这个错误:

E/AndroidRuntime(2995): FATAL EXCEPTION: main
E/AndroidRuntime(2995): java.lang.RuntimeException: Unable to start activity ComponentInfo{activities.MainActivity}:    
java.lang.IllegalStateException: The specified child already has a parent. You …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-actionbar android-tabs

0
推荐指数
1
解决办法
2988
查看次数