我有一个包含很多字段的列表,需要使用stream在一次传递中创建一个列表。
>
我们需要将列表中的字段current标记为true,以获得输入列表中最小的正整数
输入:
[PT(pn=-1, endDate=2019-01-11, dp=MAR 2019,..),
PT(pn=4, endDate=null, dp=APR 2019,..),
PT(pn=6, endDate=2019-05-11, dp=MAY 2019,..)]
输出:
[OP(pn=11, current=false, dp=MAR 2019),
OP(pn=4, current=true, dp=APR 2019),
OP(pn=6, current=false, dp=MAY 2019)]
class OP{
Integer pn;
Boolean current;
String dp;
}
List<OP> filteredList11 = availablePT.get()
.stream()
.map(e->new OP(e.getPn(),**,e.getDp()))
.collect(Collectors.toList());
我有点困惑,如何推导逻辑,将单个循环中最小正整数的当前标志(**)更新为true。
以下是您的要求:
AtomicBoolean isFirst = new AtomicBoolean(true);
List<OP> filteredList11 = availablePT.get()
.stream()
.map(e->new OP(e.getPn(),**,e.getDp()))
.sorted(Comparator.comparingInt(OP::getPn))
.peek(e -> {
if (e.getPn() % 2 == 0) {
e.setCurrent(isFirst.getAndSet(false));
}
})
.collect(Collectors.toList());
你可以这样做:
首先找到最不肯定的PT
对象。
Optional<PT> latestPositive = availablePT.stream()
.filter(pt -> pt.getPn() > 0)
.min(Comparator.comparingInt(PT::getPn));
然后通过stream overainablePT
list创建OP
对象。
List<OP> filteredList11 = availablePT.stream()
.map(pt -> new OP(pt.getPn(),
pt.equals(latestPositive.orElse(null)), pt.getDp()))
.collect(Collectors.toList());
如果你有兴趣在使用单流这样做:
首先编写一个自定义比较器。
Comparator<PT> ptComparator = (o1, o2) -> {
if (o2.getPn() < 0) {
if (o1.getPn() > 0)
return -1;
} else if (o2.getPn() > 0) {
if (o1.getPn() < 0)
return 1;
}
return Integer.compare(o1.getPn(), o2.getPn());
};
然后用你的比较器排序列表
AtomicInteger integer = new AtomicInteger(0);
List<OP> filteredList11 = availablePT.stream()
.sorted(ptComparator)
.map(pt -> new OP(pt.getPn(), integer.incrementAndGet()==1, pt.getDp()))
.collect(Collectors.toList());
这是另一种方法。有一个OP构造函数,它接受一个PT并映射所有字段,加上默认设置为false的额外布尔值。
然后做这样的事情:
List<OP> ops = availablePT.stream().map(dp -> {return new OP(dp);})
.filter(line -> line.getPn()!=null && line.getPn().doubleValue()>=0)
.sorted(Comparator.comparingInt(OP::getPn))
.collect(Collectors.toList());
if(ops!=null && !ops.isEmpty()) {
ops.get(0).setCurrent(true);
}
这基本上是创建新的对象,然后过滤掉负值,然后对可能的对象进行排序,然后保证具有最小dp值的op是第一个,因此将其设置为布尔值为true
我尝试了以下方法,但在编辑归档后,它会更改样式,但也会更改列表中其他ListCell的样式。
我有以下Java超类,每个属性都有构造函数、getter和setter: 和一个car子类,它扩展了vehicle超类,并具有几个独特的属性: 我创建一个新的vehicle对象链表,并向其中添加一个新的car对象: 我可以用下面这样的函数更改属于vehicle超级类的任何属性: 但是当我试图创建一个类似的函数来更改其中一个子类属性时,我得到了这个错误:“方法setWheels(int)对于类型Ve
下表(按对象名称排序)列出了 Microsoft Office 中已有对象添加的属性。对象属性CommandBarButton Mask Picture CommandBars DisableAskAQuestionDropdown DisableCustomizeFileDialog AllowMultiSelect ButtonName DialogType FilterIndex Filte
我有一个名为的对象,它描述了一个项目的买卖行为。与其他一些属性相比,它主要如下所示: 具有各自的吸气器和设置器。是该项目应出售/购买的金额,ItemData描述该项目的规格。PriceType是一个枚举,它是或。 我现在有一个方法,是哪个工作,在一个列表中找到最匹配的价格。我的所有价格都存储在一个简单称为的列表中。到目前为止,我的方法只是遍历列表,并返回与和匹配的第一个: 然而,这完全忽视了一个事
我有一个按月-年字符串属性排序的对象列表。我的对象类定义如下 我想对会员人数、非会员人数、会员付款、非会员付款进行累计和 所以我的新对象列表如下 我尝试与但它给我所有的总和不累积。 非常感谢任何指点。
问题内容: 我有一个像这样的JSON字符串: 我想将属性更新为,如果值为,并且值为。 我已经到了这一点,但是不确定如何进行: 我不知道怎么去的是一个孩子。 提前致谢。任何指针都很棒。 问题答案: 您可以使用属性作为键来访问对象: 对于您的示例,请尝试: