将SQL转换为java lambda
我有以下查询,我想将其转换为在我拥有的List类上使用。目标是将其转换为Java8Lambda。我面临的主要问题是将“TradeMinesnceMidnight and paper”输出到新列表中 AssetTotals类当然将包含4个带有访问器的输出字段(price、countPapers、Papers、TradeMinutess)将SQL转换为java lambda,java,lambda,java-8,Java,Lambda,Java 8,我有以下查询,我想将其转换为在我拥有的List类上使用。目标是将其转换为Java8Lambda。我面临的主要问题是将“TradeMinesnceMidnight and paper”输出到新列表中 AssetTotals类当然将包含4个带有访问器的输出字段(price、countPapers、Papers、TradeMinutess) 从sgdata.ASSET group by TRADEMINUTESSINCEMIDNIGHT中选择平均(价格)、计数(价格)、纸张、TRADEMINUTESS
从sgdata.ASSET group by TRADEMINUTESSINCEMIDNIGHT中选择平均(价格)、计数(价格)、纸张、TRADEMINUTESSINCEMIDNIGHT
公共类资产实现了可序列化、可比较的{
私有静态最终长serialVersionUID=1L;
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
private Long id;//仍然自动设置
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
长序列号;
字符串交换;
线板;
长时间;
线纸;
交易时间长;
数量多;
双倍价格;
字符串源;
弦乐买家;
线人;
漂浮物变化;
字符串启动器;
从午夜开始的漫长时间;
从午夜开始的漫长交易;
长日照期;
公共长getSequenceNo(){
返回序列号;
}
公共无效序列号(长序列号){
this.sequenceNo=sequenceNo;
}
公共字符串getExchange(){
换汇;
}
公共无效集合交换(字符串交换){
交换=交换;
}
公共字符串getBoard(){
返回板;
}
公共空隙立根板(线板){
董事会=董事会;
}
公共长getTime(){
返回时间;
}
公共无效设置时间(长时间){
这个时间=时间;
}
公共字符串getPaper(){
回执纸;
}
公共空白衬纸(线纸){
这张纸=纸;
}
公共长时间(){
返回时间;
}
公共无效设置交易时间(长交易时间){
this.tradeTime=交易时间;
}
公共长getQuantity(){
退货数量;
}
公共无效设置数量(长数量){
这个。数量=数量;
}
公开双价{
退货价格;
}
公共定价(双倍价格){
这个价格=价格;
}
公共字符串getSource(){
返回源;
}
公共void集合源(字符串源){
this.source=源;
}
公共字符串getBuyer(){
退货买家;
}
公共买方(字符串买方){
这个。买方=买方;
}
公共字符串getSeller(){
退货卖家;
}
公共无效设置卖方(字符串卖方){
this.seller=卖方;
}
公共浮点getChangeSinceLast(){
最后的回报变化;
}
公共无效设置更改最后一次(浮动更改最后一次){
this.changeSinceLast=changeSinceLast;
}
公共字符串getInitator(){
返回启动器;
}
公共void setInitator(字符串initator){
this.initator=initator;
}
公共长getDaysSinceEpoch(){
返回日期;返回时间;
}
公共无效setDaysSinceEpoch(长daysSinceEpoch){
this.daysSinceEpoch=daysSinceEpoch;
}
公共长getTradeTimeSinceMidnight(){
午夜返回;
}
public void setTradeTimeSinceMidnight(长tradeTimeSinceMidnight){
this.tradeTimeSinceMidnight=tradeTimeSinceMidnight;
}
公共long getTradeMinutesSinceMidnight(){
午夜后返回交易记录;
}
公共无效设置tradeMinutesSinceMidnight(长tradeMinutesSinceMidnight){
this.tradeMinutesSinceMidnight=tradeMinutesSinceMidnight;
}
@凌驾
公共布尔等于(对象obj){
返回序列号==((资产)对象)。序列号;
}
@凌驾
公共整数比较(资产其他资产){
if(this.getSequenceNo()
列表,其中还讨论了按一个属性分组和聚合多个属性的相关任务。在大多数情况下,最好让数据库为您执行查询,不要尝试在VM中检索超过需要的数据,然后执行Java代码来执行搜索和筛选。你想做什么,为什么?如果我有数据库里的信息,我会在数据库里做的。然而,我正在使用一个实时列表,并将其添加到列表中。不将数据写入数据库并检索其聚合。但是我知道使用数据库会是什么样子,这就是为什么我写了它的样子。你能展示一下你迄今为止用lambda表达式做了哪些尝试吗?如果你能展示你的表达式到目前为止已经做了多少,然后就表达式中无法使用的部分寻求具体帮助,而不是要求别人为你编写表达式,那么你就更有可能从其他人那里得到答案?哇,这是一种非常复杂的方法,需要sQL中的一行。我会尽快测试它!
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;
}
}
List<Asset> list=…;
Comparator<Asset> group=Comparator.comparing(Asset::getPaper)
.thenComparing(Asset::getTradeMinutesSinceMidnight);
list.stream().collect(Collectors.groupingBy(
Function.identity(), ()->new TreeMap<>(group),
Collectors.summarizingDouble(Asset::getPrice)))
.forEach((a,p)-> System.out.println(
a.getPaper()
+"\t"+a.getTradeMinutesSinceMidnight()
+"\t"+p.getAverage()
+"\t"+p.getCount()));