У меня ниже класс бобов < /p>
public class ElectricityReading {
private Instant time;
private BigDecimal reading; // kW
public ElectricityReading() { }
public ElectricityReading(Instant time, BigDecimal reading) {
this.time = time;
this.reading = reading;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ElectricityReading that = (ElectricityReading) o;
return Objects.equals(time, that.time);
}
@Override
public int hashCode() {
return Objects.hash(time);
}
public BigDecimal getReading() {
return reading;
}
public Instant getTime() {
return time;
}
public void setReading(BigDecimal reading){
this.reading=reading;
}
}
Мне нужно сохранить этот результат в Hashset . На самом деле я не хочу хранить время дважды. Если он повторяется, мне нужно либо игнорировать, либо перезаписать (оба будут работать, его POC). Вот почему я потратил время на equals и hashcode Метод.
Я пишу Hashset код, как ниже.
public List generate(int number) {
Setreading= new HashSet();
Instant now = Instant.now();
Random readingRandomiser = new Random();
for (int i = 0; i < number; i++) {
double positiveRandomValue = Math.abs(readingRandomiser.nextGaussian());
BigDecimal randomReading = BigDecimal.valueOf(positiveRandomValue).setScale(4, RoundingMode.CEILING);
ElectricityReading electricityReading = new ElectricityReading(now.minusSeconds(i * 10), randomReading);
if(!reading.contains(electricityReading.getTime())){
reading.add(electricityReading);
}else {
electricityReading.setReading(electricityReading.getReading());
}
}
List readings = new ArrayList(reading);
readings.sort(Comparator.comparing(ElectricityReading::getTime));
return readings;
}
Я храню элемент в списке , потому что мне нужны данные в отсортированном порядке. Есть ли в любом случае, чтобы улучшить это.
В результате вывода ниже 2 Последние значения повторяются. < /p>
[
{
"time": "2021-09-15T20:13:51.268560800Z",
"reading": 2.5574
},
{
"time": "2020-11-29T08:00:00Z",
"reading": 1.7
},
{
"time": "2020-11-29T08:00:00Z",
"reading": 1.7
}
]
Подробнее здесь: https://stackoverflow.com/questions/691 ... rted-order