나는 scala에 상응하는 java를 scala로 바꾸어서 이해하려고 노력하는 것이 매우 익숙해 져서 더 나은 이해를 얻는다.자바 8지도, 필터 및 스트림을 스칼라로 변환하는 방법은 무엇입니까?
자바 8지도, 필터 및 스트림을 스칼라로 변환하는 방법은 무엇입니까?
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());
}
내가 시도 :
은 내가 스칼라로 변환하려고 다음과 같은 자바 (8) 코드를
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
}
그러나 필터 스트림을하는 동안 오류가 발생. 어떤 사람이 방향을 지시 할 수 있습니까? 어떤 참조? 나는 getValidUsages에 오류가 점점 오전 :
compile error “cannot resolve reference project with such signature
오류 메시지가 무엇입니까? – Nyavro
자바 구문을 스칼라 구문으로 변환하는 대신 javadoc을 확인해 보셨습니까? 비 게으름 스트림은 필요하지 않습니다. 'list','Set'에 직접'filter','map','isEmpty'를하는 것은 어떻습니까? 당신은 자바 컬렉션을 계속 사용하고자하는 경우 – waltersu
, 당신은 아마이 필요합니다 : https://github.com/scala/scala-java8-compat#using-java-8-streams-with-scala-function-converters –