我正在使用方法<% include partials/header.ejs %>
<% if (colours.length > 0) {%>
<ul>
<% colours.forEach((colour, index) => { %>
<li><a href="/colour/<%= colour.id %>"><%= colour.name %></li> <a href="/remove">DEL</a></li>
<% }) %>
</ul>
<% } else { %>
<p class="text-center">No colours found</p>
<% } %>
<p><a href="/add-colour">Add New Color</a></p>
<% include partials/footer.ejs %>
///////////////////////////////////////////////////////////////////
js
const express = require('express');
const router = express.Router();
const mysql = require('mysql');
const app = express();
const bodyParser = require('body-parser');
app.use(express.static('public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
var connection = mysql.createConnection({
user : 'root',
password : 'root',
host: 'localhost',
port: 3306,
// socketPath : '/Applications/MAMP/tmp/mysql/mysql.sock',
database : 'js',
});
connection.connect((err) => {
if (err) {
throw err;
}
console.log('Connected to database');
});
global.connection = connection;
router.get('/',function(req,res){
let query = "SELECT * FROM colours ORDER BY id ASC";
connection.query(query, (err, result) => {
if (err) {
throw err;
}
res.render('index.ejs', {
colours: result
});
});
});
////////////////////////////////////////////////////////////
//DELETE FROM `colours` WHERE `colours`.`id` = 3;
//////////////////////////////////////////////////////////////////
router.get('/remove',function(req,res){
connection.connect('/remove',function(err) {
if (err) throw err;
//Delete all customers with the address "Mountain 21":
var sql = "DELETE FROM colours WHERE 1";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Number of records deleted: " + result.affectedRows);
});
});
res.render('index.ejs');
});
router.get('/add-colour',function(req,res){
res.render('add-colour.ejs');
});
router.post('/add-colour-complete',function(req,res){
let query = 'INSERT INTO colours (name) VALUES ("'+req.body.name+'")';
connection.query(query);
res.writeHead(302, {
'Location': '/'
});
res.end();
});
router.post('/colour/:id',function(req,res){
let query = "SELECT * FROM colours WHERE id = "+req.params.id;
connection.query(query, (err, result) => {
if (err) {
throw err;
}
res.render('colour.ejs', {
colour: result[0]
});
});
});
app.use('/', router);
app.listen(8080);
console.log('Running at Port 8080');
来排序名为compareTo()
的自定义对象的ArrayList
,但是在我的应用程序中,有时我需要根据特定属性对数组进行排序,例如image
,有时我需要根据对象的另一属性或属性对数组进行排序,但是对于不同的排序,我不能多次重写goodMatches
方法。
我已经尝试过使用Object的flags属性,但是问题是其他属性都是float类型的,我需要保留方法compareTo()
来返回float而不是compareTo
的整数。任何人都可以帮助我克服这个问题而无需创建另一个对象类吗,任何帮助将不胜感激,以下是我的goodMatches
代码:
compareTo()
答案 0 :(得分:1)
给出以下Image
类(使用大写的类名)
class Image {
private int goodMatches;
private float anotherProperty;
.....
public int getGoodMatches() {
return goodMatches;
}
public float getAnotherProperty() {
return anotherProperty;
}
}
您可以为每个属性创建一个Comparator:
class GoodMatchesComparator implements Comparator<Image> {
@Override
public int compare(Image i1, Image i2) {
return Integer.compare(i1.getGoodMatches(), i2.getGoodMatches());
}
}
class AnotherPropertyComparator implements Comparator<Image> {
@Override
public int compare(Image i1, Image i2) {
return Float.compare(i1.getAnotherProperty(), i2.getAnotherProperty());
}
}
然后使用“列表”上的sort方法对列表进行排序:
List<Image> images = new ArrayList<>();
// populate your list
// sort the list based on the goodMatches property
images.sort(new GoodMatchesComparator());
// sort the list based on the anotherProperty property
images.sort(new AnotherPropertyComparator());
如果您需要逆序订购,可以按照以下方式进行操作:
images.sort(new GoodMatchesComparator().reversed());
答案 1 :(得分:0)
通过传递ICompare的实现,而不是重写compareTo()
,而是尝试创建一个名为Comparator
的类,该类创建一个比较器(确定哪个对象具有更高优先级的判断器)。
public interface ICompare{
compare(image obj1, image obj2);
}
Comperator类:
public class Comperator{
ICompare icompare;
Comperator(ICompare icompare){
this.icompare = icompare;
}
public int compare(image img1, image img2){
return icompare.compare(img1,img2);
}
}
最后,通过传递所需的已实现接口来创建所需的Comperator对象。然后使用它来比较图像类型的对象。
我想在这里告诉您,您可以在此处使用泛型,但我不仅仅是因为我想保持其简单明了!