假设我有一个给定名称,姓氏对的地图,并且我想要找到该地图中具有匹配一定值的姓氏的第一个条目的给定名称.
我们将如何以
java 8方式做到这一点.
在我下面的测试用例的例子中,我提出了两种方法.
然而,第一个(寻找名为“Donkey”的第一个人的给定名称)将抛出java.util.NoSuchElementException:没有值存在,因此它不安全.
第二个工作,但它不仅阅读困难但它有点不太有用.
只是想知道有人在这里会建议我使用stream()或forEach()或两者来实现这一点更为简单一些.
@Test
public void shouldBeAbleToReturnTheKeyOfTheFirstMatchingValue() throws Exception {
Map names = new LinkedHashMap<>();
names.put(“John”,“Doe”);
names.put(“Fred”,“Flintstone”);
names.put(“Jane”,“Doe”);
String keyOfTheFirst = names.entrySet().stream().filter(e -> e.getValue().equals(“Doe”)).findFirst().get().getKey();
assertEquals(“John”,keyOfTheFirst);
try {
names.entrySet().stream().filter(e -> e.getValue().equals(“Donkey”)).findFirst().get();
} catch (NoSuchElementException e){
// Expected
}
Optional> optionalEntry = names.entrySet().stream().filter(e -> e.getValue().equals(“Donkey”)).findFirst();
keyOfTheFirst = optionalEntry.isPresent() optionalEntry.get().getKey() : null;
assertNull(keyOfTheFirst);
}
先谢谢你.