我是java的新手,我正在修补forEach循环。
我想在循环之外使用entry.getValue(),如下所示:
hashmap.entrySet().stream()
.sorted(Map.Entry<String,Double>comparingByValue())
.limit(1).forEach(entry->
{System.out.print("Worst output: " + entry.getValue() + ");}
);
....//print the one iteration of previous loop, or use entry.getValue() as var
答案 0 :(得分:3)
我相信您希望map
将double
条目改为double worst = hashmap.entrySet().stream()
.mapToDouble(Map.Entry<String,Double>::getValue).min().getAsDouble();
System.out.println("Worst output: " + worst);
,然后使用DoubleStream.min()
类似的内容,
min()
如果您确实希望最大值使用max()
而不是// test_main.cpp
#include <thread>
#include <iostream>
#include <string>
std::mutex gMutex;
void PrintLoop(const std::string& str, const uint32_t& time)
{
for (uint32_t i=0; i<time; i++) {
gMutex.lock();
std::cout << str << ": " << i << std::endl;
gMutex.unlock();
}
}
int main(int argc, char* argv[])
{
std::thread t0(&PrintLoop, "Thread0", 100);
std::thread t1(&PrintLoop, "Thread1", 100);
t0.join();
t1.join();
return 0;
}
。
答案 1 :(得分:2)
您只需使用max
方法即可获得最高价值:
Double max = hashmap.values()
.stream()
.max(Comparator.naturalOrder())
.orElse(null);
答案 2 :(得分:2)
如果您想对整个Map.Entry执行某些操作,并且还要优雅地处理空地图,我建议您使用Optional执行此操作。
Optional<Map.Entry<String, Double>> o = hashmap.entrySet().stream().min(Map.Entry.comparingByValue());
o.ifPresent(entry -> System.out.println(entry.getKey() + " " + entry.getValue()));
这样,如果地图中至少有一个条目,则返回最低的条目,并且由于它包含在可选项中,因此您也可以轻松处理空案例。在上面的示例代码中,它将打印密钥和值(如果存在),或者如果不存在则不执行任何操作。