我已经测试了Java 8 lambdas和stream上的max()函数,看起来如果执行max(),即使多个对象比较为0,它也会返回绑定候选者中的任意元素进一步考虑.
对于这样的最大预期行为是否有明显的技巧或功能,以便返回所有最大值?我没有在API中看到任何内容,但我确信它必须存在比手动比较更好的东西.
例如:
//myComparator is an IntegerComparator
Stream.of(1,3,5,3,2,3,5).max(myComparator).forEach(System.out::println);
//Would print 5,5 in any order.
Run Code Online (Sandbox Code Playgroud) 对于我的任务,我必须用循环来替换for循环,这些循环计算文本文档中单词的频率,并且我无法计算出TODO部分.
String filename = "SophieSallyJack.txt";
if (args.length == 1) {
filename = args[0];
}
Map<String, Integer> wordFrequency = new TreeMap<>();
List<String> incoming = Utilities.readAFile(filename);
wordFrequency = incoming.stream()
.map(String::toLowerCase)
.filter(word -> !word.trim().isEmpty())
.collect(Collectors.toMap(word -> word, word -> 1, (a, b) -> a + b, TreeMap::new));
int maxCnt = 0;
// TODO add a single statement that uses streams to determine maxCnt
for (String word : incoming) {
Integer cnt = wordFrequency.get(word);
if (cnt != null) {
if (cnt > maxCnt) { …Run Code Online (Sandbox Code Playgroud) 我有多个开始和结束的日期。这些日期可能如下所示:
d1: |----------|
d2: |------|
d3: |--------------|
d4: |----|
d5: |----|
Run Code Online (Sandbox Code Playgroud)
现在我需要检查重叠日期的最大计数。所以在这个例子中,我们得到最多 3 个重叠日期(d1、d2、d3)。考虑一下,可以有 0 到 n 个日期。
你能帮我完成这个任务吗?先感谢您。
更新
输入:带有开始和结束点的 Java 日期列表,例如 List,其中 MyCustomDate 包含开始和结束日期
输出:重叠日期(作为 MyCustomDate 的列表)
每个时间跨度包括一个带有小时和秒的 LocalDateTime 类型的开始和结束点。