小编om-*_*nom的帖子

运行 Scala Jar

当我使用 Eclipse 将我的 scala 代码打包到一个 jar 中时,我无法运行所述 jar 文件。我有:

    object Hello extends App{
       println("Hello World!")
    }
Run Code Online (Sandbox Code Playgroud)

和:

    public class Runner {
       public static void main(String[] args) {
          Hello.main(args);
       }
   }
Run Code Online (Sandbox Code Playgroud)

我使用 eclipse 将其打包到一个名为 Hello.jar 的可运行 jar 中。java -jar Hello.jar 然后给出:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/App
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at Hello.main(Hello.scala)
at Runner.main(Runner.java:4)
Caused by: java.lang.ClassNotFoundException: scala.App
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) …
Run Code Online (Sandbox Code Playgroud)

eclipse scala jar noclassdeffounderror

1
推荐指数
1
解决办法
4056
查看次数

有人能解释我**之间的界限吗?我不明白地图是如何工作的

def combinations(occurrences: Occurrences): List[Occurrences] = occurrences match {  
    case List() => List(List())
    case occ :: occs =>
        for {
            **occSub <- (0 to occ._2).map((occ._1, _)).toList**
            occsCombination <- combinations(occs)
            } yield (occSub :: occsCombination).filter(x => x._2 != 0)
}
Run Code Online (Sandbox Code Playgroud)

scala map

1
推荐指数
1
解决办法
264
查看次数

kafka Producer上的"ClassCastException:kafka.message.Message无法强制转换为java.lang.String"

我正在尝试编写一些简单的生成器,将消息写入kafka我已经下载了kafka0.7

运行kafka服务器,生产者和消费者

>   bin/kafka-server-start.sh config/server.properties
>   bin/kafka-console-consumer.sh --zookeeper zooserver:2181 --topic test --from-beginning
>   bin/kafka-console-producer.sh --zookeeper zooserver:2181 --topic test
Run Code Online (Sandbox Code Playgroud)

一切正常!

然后我创建了简单的消费者,它也有用.

SimpleConsumer consumer = new SimpleConsumer("172.21.110.134", 9092, 10000, 1024000);
…
ByteBufferMessageSet messages = consumer.fetch(fetchRequest);
System.out.println("consumed: " + Utils.toString(msg.message().payload(), "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

但是下面的生产者总是会抛出一个错误

ProducerConfig config = new ProducerConfig(props);
…
Producer<String, Message> producer = new Producer<String, Message>(config);
producer.send(new ProducerData<String, Message>("test", new Message("Hello World".getBytes())));
Run Code Online (Sandbox Code Playgroud)

获得以下异常

Exception in thread "main" java.lang.ClassCastException: kafka.message.Message cannot be cast to java.lang.String
            at kafka.serializer.StringEncoder.toMessage(Encoder.scala:30)
            at kafka.producer.ProducerPool$$anonfun$send$1$$anonfun$3$$anonfun$apply$1.apply(ProducerPool.scala:107)
Run Code Online (Sandbox Code Playgroud)

我在java代码中使用maven依赖项

<dependency>
      <groupId>com.twitter</groupId>
         <artifactId>kafka_2.9.2</artifactId>
         <version>0.7.0</version>
     </dependency> …
Run Code Online (Sandbox Code Playgroud)

scala bigdata apache-kafka

1
推荐指数
1
解决办法
6762
查看次数

在for循环中赋值var arraybuffer:"重新分配给val"

如标题中所述,我无法Arraybuffer(Arraybuffer(Int,Int),Int)在for中重新分配类型的变量loop:

var ab1 = ArrayBuffer(le4: _*)
var ab2 = ab1 map (ligne => (ArrayBuffer(ligne._1: _*), ligne._2))
println("ab:" + ab2)

for {
    i <- 1 to ab2.length
    j <- 0 to i
} {
    ab2(i)._1(j)._2 = j match {
        case 0 =>  ab2(i - 1)._1(0)._2 + ab2(i)._1(j)._1
        case i =>  ab2(i - 1)._1(j - 1)._2 + ab2(i)._1(j)._1
        case _ =>  ab2(i - 1)._1(j)._2 + ab2(i - 1)._1(j - 1)._1 + ab2(i)._1(j)._1
    }
}
Run Code Online (Sandbox Code Playgroud)

关键点是ab2声明为var但是其中的Int的更改被拒绝.为什么?

for-loop scala

1
推荐指数
1
解决办法
514
查看次数

获取实现类Scala的类型

如何获取实现类的类型或类符号。这总是会给我类模型。我什至尝试使用泛型,但是编译器不喜欢 typeOf[T] 并且无论如何它都很丑陋。非常感谢任何帮助。

import scala.reflect.runtime.universe._

abstract class Model {
  def className = typeOf[this.type].typeSymbol.asClass
}
Run Code Online (Sandbox Code Playgroud)

scala scala-2.10

1
推荐指数
1
解决办法
71
查看次数

如何在Scala中将秒转换为时间?

println("What is the current number of seconds since midnight?")

val s = readInt

val m = (s/60) % 60

val h = (s/60/60) % 24
Run Code Online (Sandbox Code Playgroud)

那是我目前的代码.我只是不知道如何println("")所以它以hh:mm形式显示.预先感谢您的任何帮助!

scala

1
推荐指数
2
解决办法
1678
查看次数

无法在Scala中生成简单的GET请求

我只是无法在scalaj-http中执行get请求:

 Http("https://someUrl.com")
  .option(HttpOptions.connTimeout(6000))
  .option(HttpOptions.readTimeout(15000))
  .asString

Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.mutable.StringBuilder.append([CII)Lscala/collection/mutable/StringBuilder;
    at scalaj.http.Http$.readOnce$1(Http.scala:163)
    at scalaj.http.Http$.readString(Http.scala:167)
    at scalaj.http.Http$Request$$anonfun$asString$1.apply(Http.scala:128)
    at scalaj.http.Http$Request$$anonfun$asString$1.apply(Http.scala:128)
    at scalaj.http.Http$.tryParse(Http.scala:148)
    at scalaj.http.Http$Request$$anonfun$apply$1.apply(Http.scala:85)
    at scalaj.http.Http$Request$$anonfun$apply$1.apply(Http.scala:85)
    at scalaj.http.Http$Request.process(Http.scala:99)
    at scalaj.http.Http$Request.apply(Http.scala:85)
    at scalaj.http.Http$Request.asString(Http.scala:128)
    at com.me.method1(API.scala:21)
    at com.me.Application$delayedInit$body.apply(Application.scala:5)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
    at scala.App$class.main(App.scala:71)
    at com.me.Application$.main(Application.scala:3)
    at com.me.Application.main(Application.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Run Code Online (Sandbox Code Playgroud)

如果我添加此选项

Http("https://someUrl.com")
  .option(HttpOptions.connTimeout(6000))
  .option(HttpOptions.readTimeout(15000))
  .option(HttpOptions.allowUnsafeSSL)
  .asString
Run Code Online (Sandbox Code Playgroud)

然后错误变成:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/reflect/ClassManifest$
    at scalaj.http.HttpOptions$$anonfun$allowUnsafeSSL$1.apply(Http.scala:30)
    at …
Run Code Online (Sandbox Code Playgroud)

scala noclassdeffounderror

1
推荐指数
1
解决办法
1181
查看次数

如果不为null,则Scala方式添加到List

斯卡拉新手在这里......

使用getStLine*()方法在地址java对象上执行以下操作...会为返回的空字符串生成一个带空字符串的List.什么是Scala方式干净利落地不将空字符串添加到列表中.

val streets = List[String](addr.getStLine1, addr.getStLine2, addr.getStLine3)
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

1
推荐指数
1
解决办法
1394
查看次数

以惯用的方式组合选项

我将在Scala中编写这个,但它更像是一个函数式编程问题.

我有

def foo(x: A): Option[B]
Run Code Online (Sandbox Code Playgroud)

def bar(x:B, y:B): C
Run Code Online (Sandbox Code Playgroud)

执行以下操作的最佳方法是什么:

def compose(x:A, y:A): Option[C]
Run Code Online (Sandbox Code Playgroud)

如果foo(y)的foo(x)为None,则compose(x,y)为None,否则compose(x,y)为bar(foo(x).get,foo(y).get) .我能想到的最好的是:

foo(a).flatMap( aRes => foo(b).map( bRes => bar(a,b)))
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

1
推荐指数
1
解决办法
90
查看次数

如何使用JavaConversions将Map的Iterator从Java转换为Scala

我使用Scala 2.10.3.
result.iterator()回来了Iterator<java.util.Map<String, Object>>.(在Java中)

我想将它转换为Scala等价物.
import scala.collection.JavaConversions._用来试图做到这一点.

但是,它似乎无法考虑类型参数,在这种情况下,它可以转换java.util.Iterator为Scala等效项,但无法转换java.util.Map为Scala等效项.

实际上,此行发生编译器错误:

val results: Iterator[Map[String, AnyRef]] = result.iterator()

    type mismatch;
     found   : java.util.Iterator[java.util.Map[String,Object]]
     required: scala.collection.Iterator[scala.collection.immutable.Map[String,AnyRef]]
     val results: Iterator[Map[String, AnyRef]] = result.iterator()
                                                                ^
Run Code Online (Sandbox Code Playgroud)

有没有简短的方法来做这个伎俩?

scala scala-java-interop scala-collections

1
推荐指数
1
解决办法
695
查看次数