Java 如何按对象内树状图中的第一个键对对象列表进行排序
在Java代码中,我有一个TranscriptionLog类,如下所示: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<>
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在评论中提到的括号;添加它应该可以解决问题