gpt4 book ai didi

Java流通过键查找值(如果存在)

转载 作者:行者123 更新时间:2023-11-29 08:25:30 25 4
gpt4 key购买 nike

我有简单的数据结构

public class DataStructure {
private String key;
private String value;
//get, set
}

我需要根据键从“List”返回值,我想用 Java8 的方式用流来做。我认为代码不言而喻:

public class Main {
public static void main(String args[]) {
List<DataStructure> dataList = new ArrayList<>();
dataList.add(new DataStructure("first", "123"));
dataList.add(new DataStructure("second", "456"));

System.out.println(findValueOldSchool(dataList, "third")); //works ok
System.out.println(findValueStream(dataList, "third")); //throws NoSuchElementException
}

static String findValueOldSchool(List<DataStructure> list, String key) {
for (DataStructure ds : list) {
if (key.equals(ds.getKey())) {
return ds.getValue();
}
}
return null;
}

static String findValueStream(List<DataStructure> list, String key) {
return list.stream()
.filter(ds -> key.equals(ds.getKey()))
.findFirst()
.get().getValue();
}
}

如何修改 findValueStream() 以在搜索不存在的 key 时不抛出 NoSuchValueException?我不想返回Optional<String>,因为这个方法已经在项目中很多地方使用了。而且,当然我已经尝试过 mapifPresentanyMatch ,只是找不到正确的方法。

最佳答案

你应该使用Stream.findFirstOptional.orElse喜欢:

static String findValueStream(List<DataStructure> list, String key) {
return list.stream() // initial Stream<DataStructure>
.filter(ds -> key.equals(ds.getKey())) // filtered Stream<DataStructure>
.map(DataStructure::getValue) // mapped Stream<String>
.findFirst() // first Optional<String>
.orElse(null); // or else return 'null'
}

注意:上面使用了Stream.mapDataStructure 流映射到相应的 value 流。

关于Java流通过键查找值(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53554572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com