【发布时间】:2015-05-04 18:22:11
【问题描述】:
我有以下查询,我想将其转换为在我拥有的 List 类上使用。目标是将其转换为 java 8 lambda。我面临的主要问题是让“trademinuessincemidnight and paper”输出到新列表
AssetTotals 类当然会包含 4 个带有访问器的输出字段(price、countPapers、paper、trademinutessincemidnight)。
SELECT avg(price), count(price), paper, TRADEMINUTESSINCEMIDNIGHT FROM sgdata.ASSET group by TRADEMINUTESSINCEMIDNIGHT, paper order by paper, TRADEMINUTESSINCEMIDNIGHT
public class Asset implements Serializable, Comparable<Asset> {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id; // still set automatically
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
long sequenceNo;
String Exchange;
String Board;
long time;
String paper;
long tradeTime;
long quantity;
double price;
String source;
String buyer;
String seller;
float changeSinceLast;
String initator;
long tradeTimeSinceMidnight;
long tradeMinutesSinceMidnight;
long daysSinceEpoch;
public long getSequenceNo() {
return sequenceNo;
}
public void setSequenceNo(long sequenceNo) {
this.sequenceNo = sequenceNo;
}
public String getExchange() {
return Exchange;
}
public void setExchange(String exchange) {
Exchange = exchange;
}
public String getBoard() {
return Board;
}
public void setBoard(String board) {
Board = board;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public String getPaper() {
return paper;
}
public void setPaper(String paper) {
this.paper = paper;
}
public long getTradeTime() {
return tradeTime;
}
public void setTradeTime(long tradeTime) {
this.tradeTime = tradeTime;
}
public long getQuantity() {
return quantity;
}
public void setQuantity(long quantity) {
this.quantity = quantity;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getBuyer() {
return buyer;
}
public void setBuyer(String buyer) {
this.buyer = buyer;
}
public String getSeller() {
return seller;
}
public void setSeller(String seller) {
this.seller = seller;
}
public float getChangeSinceLast() {
return changeSinceLast;
}
public void setChangeSinceLast(float changeSinceLast) {
this.changeSinceLast = changeSinceLast;
}
public String getInitator() {
return initator;
}
public void setInitator(String initator) {
this.initator = initator;
}
public long getDaysSinceEpoch() {
return daysSinceEpoch;
}
public void setDaysSinceEpoch(long daysSinceEpoch) {
this.daysSinceEpoch = daysSinceEpoch;
}
public long getTradeTimeSinceMidnight() {
return tradeTimeSinceMidnight;
}
public void setTradeTimeSinceMidnight(long tradeTimeSinceMidnight) {
this.tradeTimeSinceMidnight = tradeTimeSinceMidnight;
}
public long getTradeMinutesSinceMidnight() {
return tradeMinutesSinceMidnight;
}
public void setTradeMinutesSinceMidnight(long tradeMinutesSinceMidnight) {
this.tradeMinutesSinceMidnight = tradeMinutesSinceMidnight;
}
@Override
public boolean equals(Object obj) {
return sequenceNo == ((Asset)obj).sequenceNo;
}
@Override
public int compareTo(Asset otherAsset) {
if (this.getSequenceNo() < otherAsset.getSequenceNo()) {
return -1;
}
else if (this.getSequenceNo() == otherAsset.getSequenceNo()) {
return 0;
}
return 1;
}
@Override
public String toString() {
return this.paper + " " + this.price + " " + this.tradeMinutesSinceMidnight;
}
}
【问题讨论】:
-
在大多数情况下,您最好让数据库为您执行查询,而不是尝试在 VM 中检索超出您需要的数据,然后执行 Java 代码来执行搜索和过滤。你想做什么,为什么?
-
如果我有数据库中的信息,我会在数据库中完成。但是我正在实时使用列表并添加到该列表中。不将数据写入数据库并检索它的聚合。但我知道使用数据库会是什么样子,这就是我写它的原因。
-
你能用你的 lambda 表达式展示你到目前为止所做的尝试吗?如果您可以展示到目前为止您的表达方式已经走了多远,然后就您无法使用的表达方式寻求具体帮助,而不是要求某人帮助您,您更有可能从其他人那里得到答案给你写表达式?