我想使用 java stream 来迭代列表并找到BigDecimal
最低价格。以下说明但不起作用(因为min()
无法接受BigDecimal
。
class Product {
public BigDecimal price;
}
List<Product> products;
products.stream().min((Product) p -> p.price);
答案 0 :(得分:6)
由于$(document).on( "touchend click", function(){
$ ( "#menumobile" ).show();
hideMenu(); //hide again after 2 seconds
})
已经是BigDecimal
,因此它很简单:
Comparable
答案 1 :(得分:2)
您不需要流来查找最小值。使用Collections.min
:
Collections.min(products, Comparator.comparing(p -> p.price));
答案 2 :(得分:1)
要解决此问题,请使用以下代码:
products.stream().min(Comparator.comparing(p -> p.price)).get();
Comparator.comparing
方法需要一个接受输入并返回Comparable
的函数。反过来,此Comparable由比较方法用于创建比较器。 min
方法使用比较器来比较流中的元素。
lambda表达式p->p.price
创建一个函数,它接受BigDecimal
并返回BigDecimal(这是一个可比较的)。这里,lambda表达式并没有太大作用,但是在你有一个没有实现Comparable的类并且你想要使用该类的属性Comparable来比较该类的对象的情况下,这非常有用。
需要调用get(),因为max(Comparator)
返回一个Optional对象。
答案 3 :(得分:1)
你有没有尝试过:
class FieldSerializer(serializers.ModelSerializer):
class Meta:
model = Field
fields = 'id', 'name', 'default'
class DocumentSerializer(serializers.HyperlinkedModelSerializer):
field = FieldSerializer(many=False, read_only=True)
def _save_field(self, instance):
field = self.initial_data.pop('field', None)
field_ids = field['id']
field = Field.objects.get(pk=field_ids)
instance.field = field
def save(self, **kwargs):
instance = super().save(**kwargs)
self._save_field(instance)
答案 4 :(得分:1)
您也可以使用以下内容,
BigDecimal bigDecimal = products.stream()
.map(d -> d.getPrice())
.reduce(BigDecimal::min).get();
System.out.println(bigDecimal.longValueExact());