我從服務器獲取數據並將其緩存在linked list
中。收到數據後,我將其分配給本地的timestamp
,以便我LinkedList
中的每個元素都具有timestamp
屬性。現在我想從緩衝區讀出一段時間的數據。如何在給定的開始日期和結束日期時間之間在鏈接列表中獲取DateTime元素的範圍
例如從28.01.2016 08:44:00到28.01.2016 08:45:00 1分鐘的所有元素。
我該怎麼辦?我會非常感謝您的建議或代碼示例。
我從服務器獲取數據並將其緩存在linked list
中。收到數據後,我將其分配給本地的timestamp
,以便我LinkedList
中的每個元素都具有timestamp
屬性。現在我想從緩衝區讀出一段時間的數據。如何在給定的開始日期和結束日期時間之間在鏈接列表中獲取DateTime元素的範圍
例如從28.01.2016 08:44:00到28.01.2016 08:45:00 1分鐘的所有元素。
我該怎麼辦?我會非常感謝您的建議或代碼示例。
JAVA 8:
public class TimeInListTest {
public static void main(String[] args) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
List<Element> list = new LinkedList<>();
list.add(new Element(dateFormat.parse("28.01.2016 08:43:00 ")));
list.add(new Element(dateFormat.parse("28.01.2016 08:43:05 ")));
list.add(new Element(dateFormat.parse("28.01.2016 08:44:00 ")));
list.add(new Element(dateFormat.parse("28.01.2016 08:44:30 ")));
list.add(new Element(dateFormat.parse("28.01.2016 08:44:35 ")));
list.add(new Element(dateFormat.parse("28.01.2016 08:44:38 ")));
list.add(new Element(dateFormat.parse("28.01.2016 08:45:00 ")));
list.add(new Element(dateFormat.parse("28.01.2016 08:46:00 ")));
Date leftLimit = dateFormat.parse("28.01.2016 08:44:00");
Date rightLimit = dateFormat.parse("28.01.2016 08:45:00");
System.out.println(list.stream().filter(element -> element.date.after(leftLimit) && element.date.before(rightLimit)).collect(Collectors.toList()));
}
static class Element {
Date date;
String someData;
public Element() {
}
public Element(Date date) {
this.date = date;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "Element{" +
"date=" + date +
'}';
}
}
}
JAVA 7(取代的λ):
List<Element> resultList = new LinkedList<>();
for (Element element: list) {
if (element.date.after(leftLimit) && element.date.before(rightLimit)) {
resultList.add(element);
}
}
System.out.println(resultList);
結果:
[元素{日期=星期四08年1月28日: 44:30 MSK 2016},元素{date = Thu Jan 28 08:44:35 MSK 2016},元素{日期=週四1月28日8點44分38秒MSK 2016}]
作爲salamu alaykum! U menya vot takoy錯誤按摩(「令牌上的語法錯誤」),ElidedSemicolonAndRightBrace預計「)vsplyvaet。 K sozhaleniyu,mne語法Java 8 ne znakom。珏MNE pravil'nee VOT ETU tvoyu stroku(「tmpBuffer.stream()濾波器(元件 - > element.date.after(leftLimit)&& element.date.before(rightLimit))收集(Collectors.toList())) ;「)v Java 7 implementationmentirovat'? –
УааляйкумассалямуарахматуЛлахиуабаракатуху。 Брат,обратитевниманиенакодподзаголовком 「JAVA 7(取代拉姆達)」 - именноэтимкодомнужнозаменитьупомянутуювамистроку。 – DmitryKanunnikoff
Barakallah1u fikum,brat! –
的Java 8實現:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.AbstractMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class T35055579 {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ISO_DATE_TIME;
public static void main(String[] args) {
LinkedList<Map.Entry<String, LocalDateTime>> data = new LinkedList<>();
LocalDateTime start = LocalDateTime.parse("2016-01-28T08:43:50", DATE_TIME_FORMATTER);
for (int i = 0; i < 10; i++) {
data.add(wrap(String.valueOf(i), start.plusSeconds(i * 11)));
}
System.out.println("Full list:");
print(data);
String from = "2016-01-28T08:44:00";
String to = "2016-01-28T08:45:00";
System.out.println(String.format("Values between [%s, %s]:", from, to));
print(filter(data, from, to));
}
private static List<Map.Entry<String, LocalDateTime>> filter(LinkedList<Map.Entry<String, LocalDateTime>> data, String fromRaw, String toRaw) {
LocalDateTime from = LocalDateTime.parse(fromRaw, DATE_TIME_FORMATTER);
LocalDateTime to = LocalDateTime.parse(toRaw, DATE_TIME_FORMATTER);
return data.stream()
.filter(d -> between(d.getValue(), from, to))
.collect(Collectors.toList());
}
private static boolean between(LocalDateTime value, LocalDateTime from, LocalDateTime to) {
return (value.isAfter(from) || value.isEqual(from)) &&
(value.isBefore(to) || value.isEqual(to));
}
private static void print(List<Map.Entry<String, LocalDateTime>> data) {
data.forEach(System.out::println);
}
private static Map.Entry<String, LocalDateTime> wrap(String value, LocalDateTime time) {
return new AbstractMap.SimpleEntry<>(value, time);
}
}
結果:
Full list:
0=2016-01-28T08:43:50
1=2016-01-28T08:44:01
2=2016-01-28T08:44:12
3=2016-01-28T08:44:23
4=2016-01-28T08:44:34
5=2016-01-28T08:44:45
6=2016-01-28T08:44:56
7=2016-01-28T08:45:07
8=2016-01-28T08:45:18
9=2016-01-28T08:45:29
Values between [2016-01-28T08:44:00, 2016-01-28T08:45:00]:
1=2016-01-28T08:44:01
2=2016-01-28T08:44:12
3=2016-01-28T08:44:23
4=2016-01-28T08:44:34
5=2016-01-28T08:44:45
6=2016-01-28T08:44:56
會不會有什麼錯從一開始就走在名單上,直到你到達開始時間,然後閱讀數據,直到你達到結束時間?假設你按照時間順序插入時間戳,這應該起作用。 –