Tôi rất mới để scala cố gắng hiểu bằng cách thay đổi java tương đương để scala để tôi có được sự hiểu biết tốt hơn.Làm thế nào để chuyển đổi java 8 bản đồ, bộ lọc và suối để scala?
Làm thế nào để chuyển đổi java 8 bản đồ, bộ lọc và suối để scala?
Tôi có sau mã java 8 mà tôi đang cố gắng để chuyển đổi sang Scala:
public Set<String> getValidUsages(String itemId, long sNo, Date timeOfAccess) {
Set<String> itemSet = Sets.newHashSet();
TestWindows testWindows = items.get(itemId).getTestWindows();
final boolean isTV = existsEligibleTestWindow(testWindows.getTV(), timeOfAccess);
if (isTV) {
itemSet.add(TV);
} else {
final boolean isCableUseable = existsEligibleTestWindow(testWindows.getCableUse(), timeOfAccess);
final boolean isWifi = existsEligibleTestWindow(testWindows.getWifi(), timeOfAccess);
if (isCableUseable || isWifi) {
itemSet.add(MOVIE);
}
}
if (testWindows.getUsageIds() != null) {
itemSet.addAll(testWindows.getUsageIds()
.entrySet()
.stream()
.filter(entry -> existsEligibleTestWindow(entry.getValue(), timeOfAccess))
.map(Map.Entry::getKey)
.collect(Collectors.toSet()));
}
return itemSet;
}
private boolean existsEligibleTestWindow(List<TestWindow> windows, Date timeOfAccess) {
if (windows != null) {
return windows.stream()
.filter(w -> withinDateRange(timeOfAccess, w))
.findAny()
.isPresent();
}
return false;
}
private boolean withinDateRange(Date toCheck, TestWindow window) {
return toCheck.after(window.getStartTime()) && toCheck.before(window.getEndTime());
}
tôi đã cố gắng:
def withinDateRange(toCheck: Date, window: TestWindow): Boolean = {
toCheck.after(window.getStartTime) && toCheck.before(window.getEndTime)
}
def getValidUsages(itemId: String, sNo: Long, timeOfAccess: Date): Set[String] = {
var itemSet = Sets.newHashSet()
val testWindows = items.value(itemId).getTestWindows
val isTV = existsEligibleTestWindow(testWindows.get(0).getTV, timeOfAccess)
if (isTV) {
itemSet += TV
} else {
val isCableUseable = existsEligibleTestWindow(testWindows.get(0).getCableUse, timeOfAccess)
val isWifi = existsEligibleTestWindow(testWindows.get(0).getWifi, timeOfAccess)
if (isCableUseable || isWifi) {
itemSet += MOVIE
}
}
if (testWindows.get(0).getUsageIds != null) {
itemSet.addAll(testWindows.get(0).getUsageIds.entrySet().stream()
.filter((x) => existsEligibleTestWindow(x._2, timeOfAccess)).map(x => Map.Entry._1)
.collect(Collectors.toSet()))
}
itemSet
}
def existsEligibleConsumptionWindow(windows: List[ConsumptionWindow], timeOfAccess: Date): Boolean = {
if (windows != null) {
return windows.exists((x) => withinDateRange(timeOfAccess, x))
}
false
}
Nhưng nhận được lỗi trong khi làm bộ lọc và suối. Có thể một số điểm để hướng trực tiếp? Bất kỳ tài liệu tham khảo? Tôi nhận được lỗi trên getValidUsages:
compile error “cannot resolve reference project with such signature
Thông báo lỗi là gì? – Nyavro
Thay vì chuyển đổi cú pháp java thành cú pháp scala, Bạn đã thử kiểm tra javadoc chưa? Bạn không cần luồng không lười biếng. Làm thế nào về 'filter',' map', 'isEmpty' trực tiếp trên' List', 'Set'? – waltersu
Nếu bạn muốn tiếp tục sử dụng các bộ sưu tập java, có thể bạn sẽ cần điều này: https://github.com/scala/scala-java8-compat#using-java-8-streams-with-scala-function-converters –