我想知道有没有办法摆脱警告findFirst().get()而不使用.orElse()如果我100%知道每次都有结果,所以我永远不会到达那里NoSuchElementException.例如,让我们看看以下代码:
List<String> myList = new ArrayList<>();
myList.add("Test");
myList.add("Example");
myList.add("Sth");
String fisrstString = myList.stream().findFirst().get(); // here I surely get "Test"
Run Code Online (Sandbox Code Playgroud)
我不知道其他IDE如何对待它,但是我的IDE(IntelliJ)将其视为警告('Optional.get()' without 'isPresent()').我想可能它不知道你何时可以到达NoSuchElementException那里,何时不到,或者我不知道为什么.我知道有办法解决这个警告(isPresent()检查.orElse(something)),但有无用的代码,所以我不想使用这些解决方案,因为它们是如此不必要.你知道我该怎么做,或解释这是怎么回事?
编辑:对不起NPE,它有NoSuchElementException我的错误,但我认为这个问题仍然存在.
我有一个Model具有以下签名的课程:
class Model {
private String stringA;
private String stringB;
public Model(String stringA, String stringB) {
this.stringA = stringA;
this.stringB = stringB;
}
public String getStringA() {
return stringA;
}
public String getStringB() {
return stringB;
}
}
Run Code Online (Sandbox Code Playgroud)
我想将a映射List<Model>到List<String>包含stringA和stringB的单个流中
List<String> strings = models.stream()
.mapFirst(Model::getStringA)
.thenMap(Model::getStringB)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
要么:
List<String> strings = models.stream()
.map(Mapping.and(Model::getStringA,Model::getStringB))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
当然,他们都没有编译,但你明白了.
它有可能吗?
编辑:
例:
Model ab = new Model("A","B");
Model cd = new Model("C","D");
List<String> stringsFromModels = {"A","B","C","D"};
Run Code Online (Sandbox Code Playgroud) 如何使用java8流过滤列表并返回找到的元素(如果它是过滤列表中的唯一元素),否则(如果有更多满足条件,或者没有满足条件的结果)返回例如 Optional.empty()
我需要这样的东西:
假设我有一个:
List<String> list = Arrays.asList("Apple","Banana","Peach");
Run Code Online (Sandbox Code Playgroud)
然后我想:
Optional<String> string = list.stream()
.filter(item -> item.startsWith("A"))
.findOne();
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到:
boolean singleElement = list.stream()
.filter(item -> item.startsWith("A"))
.count() == 1;
String string = null;
if(singleElement){
string = list.stream().filter(item -> item.startsWith("A")).iterator().next();
}
Run Code Online (Sandbox Code Playgroud)
但我想知道我是否可以在一个流中完成它?
有没有单流解决方案?
我有两个型号,List<ModelA>我希望将其转换为List<ModelB>.这是我的模特:
class ModelA {
private Long id;
private String name;
private Integer value;
public ModelA(Long id, String name, Integer value) {
this.id = id;
this.name = name;
this.value = value;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public Integer getValue() {
return value;
}
}
class ModelB {
private Long id;
private Map<String, Integer> valuesByName;
public ModelB(Long id, Map<String, Integer> valuesByName) {
this.id = id;
this.valuesByName = valuesByName; …Run Code Online (Sandbox Code Playgroud) 您好,我尝试将 docker 与 Angular 应用程序一起使用,但在 npm install 时失败,而当我运行 npm install 时,它在“本地”安装时失败,但没有收到这些依赖项错误/警告。
这是 docker build 的错误日志:
> [node 4/6] RUN npm install:
#12 9.943 npm notice
#12 9.943 npm notice New patch version of npm available! 7.5.1 -> 7.5.2
#12 9.944 npm notice Changelog: <https://github.com/npm/cli/releases/tag/v7.5.2>
#12 9.944 npm notice Run `npm install -g npm@7.5.2` to update!
#12 9.944 npm notice
#12 9.950 npm ERR! code ERESOLVE
#12 9.956 npm ERR! ERESOLVE unable to resolve dependency tree
#12 9.956 npm ERR!
#12 …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下签名Model的Property类:
public class Property {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Model {
private List<Property> properties = new ArrayList<>();
public List<Property> getProperties() {
return properties;
}
}
Run Code Online (Sandbox Code Playgroud)
我想Map<String, Set<Model>>从List<Model>这里的关键是从名称Property类.我怎样才能使用java8流按其Propery名称对该列表进行分组?所有Property的名字都是独一无二的.
可以在单个流中解决,还是应该以某种方式拆分它或者寻找经典的解决方案?
我必须使用具有自动完成功能和多项选择功能的组件,我将附上一张图片以显示我的意思:
我知道基本JavaFx不支持它,但是也许您知道我在哪里可以找到如何做的建议。
如果有任何第三方库具有此功能,我将不胜感激一个链接,或者如果没有,则将帮助我实现它的任何建议 / 想法。
自动完成部分已经实现并在此处回答:JavaFX TextField自动建议,因此请不要提出建议。我对多选部分感兴趣,因此在文本字段中发现一个要显示的元素之后,我可以寻找其他项目。
我只是想知道JavaFx如何处理的监听器ObservableValue。关于监听器,我总体上有一些不清楚的地方:
我使用了一段时间的监听器和绑定,所以我知道如何使用它们(至少我想我知道:)),然后我对如何使用它们不感兴趣,因为我必须做一些更复杂的监听或绑定,我想像我写的那样澄清一些要点,以确保我有效地使用它们,并且我不会发生任何不必要的内存泄漏。
我会接受此领域的任何解释或任何好的文档,在这些方面我可以从中找到答案。
我想双向绑定两个DoubleProperty,但不是真正的1:1,例如以1:1.2的比例绑定。
我需要类似的东西:
DoubleProperty x;
DoubleProperty y;
x.bindBidirectional(y.multiply(1.2));
Run Code Online (Sandbox Code Playgroud)
因此,每次设置x的值时,y值应为x * 1.2 ,每次设置y值时,x值应为y / 1.2
我该怎么做?