Hi
My problem seems to be an easy (may he is) but I can't find how to resolve without changing all my immutable list to mutable
I've a scala application using some sealed part of a java application
In my code I get something like
def filterAdList(fromChain: ChainMessage, adList: List[Pair[IAdEngineFactory, AdOrParams]]): ListHttpResult = {
val listOfAd = adList flatMap (pair => {
val targetingContext = fromChain.engineContext.createTargetingContext(pair.getLeft)
targetingContext.adRetrieved = pair.getRight.getAd
targetingContext.retriever = pair.getLeft.createAdRetriever()
chainFinalizeTargeting.executeChain(targetingContext)
})
if (listOfAd.isEmpty) ListHttpResult(fromChain, None)
else ListHttpResult(fromChain, Some(listOfAd.toList))
}
Ok simple here I get a immutable list from listOfAd.toList
Now I convert it to java list simple
import collection.JavaConverters._
chain.engineContext.adList = listResult.get.asJava
The problem is java code that try now to sort this map like this
Collections.sort(adList, new Comparator<Pair<IAdEngineFactory, AdOrParams>>() {
@Override
public int compare(Pair<IAdEngineFactory, AdOrParams> o1, Pair<IAdEngineFactory, AdOrParams> o2) {
if (o1.getRight() != null && o2.getRight() != null) {
if (o1.getRight().getAd().getPricing() < o2.getRight().getAd().getPricing()) return 1;
else if (o1.getRight().getAd().getPricing() > o2.getRight().getAd().getPricing()) return -1;
}
return 0;
}
});
get always
java.lang.UnsupportedOperationException: null
at java.util.AbstractList.set(AbstractList.java:115) ~[na:1.6.0_45]
at java.util.AbstractList$ListItr.set(AbstractList.java:412) ~[na:1.6.0_45]
at java.util.Collections.sort(Collections.java:161) ~[na:1.6.0_45]
at com.inneractive.chains.fetch.EvaluateWinRTBHandler.findSecondAuctionPrice(EvaluateWinRTBHandler.java:78) ~[chains-2.1.20-SNAPSHOT.jar:na]
at com.inneractive.chains.fetch.EvaluateWinRTBHandler.process(EvaluateWinRTBHandler.java:33) ~[chains-2.1.20-SNAPSHOT.jar:na]
at com.inneractive.bootstraps.AdRequestBootstraps$$anonfun$receive$1.applyOrElse(AdRequestBootstraps.scala:45) ~[AdRequestBootstraps$$anonfun$receive$1.class:na]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425) [akka-actor_2.10-2.1.4.jar:na]
at akka.actor.ActorCell.invoke(ActorCell.scala:386) [akka-actor_2.10-2.1.4.jar:na]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230) [akka-actor_2.10-2.1.4.jar:na]
at akka.dispatch.Mailbox.run(Mailbox.scala:212) [akka-actor_2.10-2.1.4.jar:na]
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:506) [akka-actor_2.10-2.1.4.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262) [scala-library-2.10.1.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) [scala-library-2.10.1.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478) [scala-library-2.10.1.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) [scala-library-2.10.1.jar:na]
I think i get this because of the immutability of the scala list
may be I wrong, please help
Thanks