Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按对象内树状图中的第一个键对对象列表进行排序_Java_Sorting_Arraylist_Comparator_Treemap - Fatal编程技术网

Java 如何按对象内树状图中的第一个键对对象列表进行排序

Java 如何按对象内树状图中的第一个键对对象列表进行排序,java,sorting,arraylist,comparator,treemap,Java,Sorting,Arraylist,Comparator,Treemap,在Java代码中,我有一个TranscriptionLog类,如下所示: class TranscriptionLog { private List<Sentence> sentenceList = new ArrayList<>(); private boolean isMerged; class Sentence { private TreeMap<Long, WordObj> wordMap = new TreeMap<>

在Java代码中,我有一个TranscriptionLog类,如下所示:

class TranscriptionLog {

    private List<Sentence> sentenceList = new ArrayList<>();
    private boolean isMerged;
class Sentence {

private TreeMap<Long, WordObj> wordMap = new TreeMap<>();
private String sentence;
-但事实并非如此。它改变了句子的顺序,但没有正确排序。有什么想法吗

提前谢谢你


编辑:原来这是程序早期的一个错误。解决该错误后,我的排序工作正常。

不确定您是否熟悉Java 8流,但类似的东西应该可以工作

//List initialized with results collected from the streaming operation
List<Sentence> result = sentenceList
                              .stream()
                              .sorted(
                                 (s1, s2) -> 
                                    s1.getWordMap().firstEntry().getKey()
                                    .compareTo(s2.getWordMap().firstEntry().getKey())
                              )
                              .collect(Collectors.toList());
//使用从流操作收集的结果初始化列表
列表结果=语句列表
.stream()
.分类(
(s1,s2)->
s1.getWordMap().firstEntry().getKey()
.compareTo(s2.getWordMap().firstEntry().getKey())
)
.collect(Collectors.toList());

不确定您是否熟悉Java8流,但类似的东西应该可以工作

//List initialized with results collected from the streaming operation
List<Sentence> result = sentenceList
                              .stream()
                              .sorted(
                                 (s1, s2) -> 
                                    s1.getWordMap().firstEntry().getKey()
                                    .compareTo(s2.getWordMap().firstEntry().getKey())
                              )
                              .collect(Collectors.toList());
//使用从流操作收集的结果初始化列表
列表结果=语句列表
.stream()
.分类(
(s1,s2)->
s1.getWordMap().firstEntry().getKey()
.compareTo(s2.getWordMap().firstEntry().getKey())
)
.collect(Collectors.toList());

您是否介意将算法结果与原始数据进行对比?我通常会这样做,但结果有点难以理解。目标是能够打印所说句子的日志,并在合并到转录日志后完成所讨论的排序。我们知道句子的正确顺序,因为它们是从音频文件中转录出来的。排序会更改顺序,但不正确。树状图中的关键是句子中第一个单词说出的毫秒。我将设法找到一个好的方法来证明这一点。不过,感谢您的建议。您可以将比较器简化为
比较器。比较(s->s.getWordMap().firstKey())
。但是,如果没有代码来重现问题,或者没有比“没有正确排序”更详细的问题描述,我们将无能为力。非常感谢您的建议。我理解,下次我问什么问题时我会这么做。你介意把你的算法结果和原始数据对比一下吗?通常我会这样做,但结果有点难以理解。目标是能够打印所说句子的日志,并在合并到转录日志后完成所讨论的排序。我们知道句子的正确顺序,因为它们是从音频文件中转录出来的。排序会更改顺序,但不正确。树状图中的关键是句子中第一个单词说出的毫秒。我将设法找到一个好的方法来证明这一点。不过,感谢您的建议。您可以将比较器简化为
比较器。比较(s->s.getWordMap().firstKey())
。但是,如果没有代码来重现问题,或者没有比“没有正确排序”更详细的问题描述,我们将无能为力。非常感谢您的建议。我明白,下次我问什么的时候我会这么做。嗨!谢谢你的建议。我对溪流不太熟悉。您的建议在.collect()上给出了一个“无法解析”错误:无法解析方法“collect”(java.util.stream.collector)为什么您认为
(s1,s2)->s1.getWordMap().firstEntry().getKey().compareTo(s2.getWordMap().firstEntry().getKey()
优于OP的
比较器。比较(对象->对象.getWordMap()).firstEntry().getKey())
?除此之外,还有一个
缺失。结果证明我的排序确实有效。问题是,在程序的前面,其中一个句子的键错了。但谢谢你们两位的建议。@Holger,噢,谢谢提醒,我还不熟悉
Comparator
类将不得不看一看it@kristoffersylte太棒了,不是吗在
比较器
实用程序方法中,我们都在学习:)。问题可能是由于缺少括号(sorted()的结束括号)@Holger在评论中提到的括号;添加它应该可以解决问题!谢谢你的建议。我对溪流不太熟悉。您的建议在.collect()上给出了一个“无法解析”错误:无法解析方法“collect”(java.util.stream.collector)为什么您认为
(s1,s2)->s1.getWordMap().firstEntry().getKey().compareTo(s2.getWordMap().firstEntry().getKey()
优于OP的
比较器。比较(对象->对象.getWordMap()).firstEntry().getKey())
?除此之外,还有一个
缺失。结果证明我的排序确实有效。问题是,在程序的前面,其中一个句子的键错了。但谢谢你们两位的建议。@Holger,噢,谢谢提醒,我还不熟悉
Comparator
类将不得不看一看it@kristoffersylte太棒了,不是吗在
比较器
实用程序方法中,我们都在学习:)。问题可能是由于缺少括号(sorted()的结束括号)@Holger在评论中提到的括号;添加它应该可以解决问题