小编Vin*_*ele的帖子

Scala Group是否保留了插入顺序?

Lists,Maps等中的groupBy方法在函数后生成Map.

有没有办法使用groupBy生成一个保留插入顺序的Map(例如LinkedHashMap)?

我正在使用for循环手动插入,但我想知道一个有用的已定义函数是否可以帮助我.

提前致谢.

collections scala hashmap map

28
推荐指数
3
解决办法
8685
查看次数

两种方法具有相同的签名,为什么它的工作原理

我有一个课程,将字符串视为一个集合.这是课程中的两种方法:

@Override
public <B> IndexedSeq<B> map(final Function1<? super Character, B> function) {...}

public RichString map(final Function1<? super Character, Character> function) {...}
Run Code Online (Sandbox Code Playgroud)

只是方法的签名与我的问题相关.现在,Eclipse确实发出警告,表明这两种方法具有相同的擦除功能.但它仍然允许我创建它们,并且它们按预期工作:每当我提供将Character转换为Character的函数时,就会返回RichString,如我所愿.

我的问题是它为什么有用,因为在运行时没有关于泛型类型的信息,并且方法的返回不是方法签名的一部分?当我调用它们时,JVM如何知道调用这两种方法中的哪一种?

编辑:

我认为,在擦除之后,这两种方法将具有以下特征:

@Override
public IndexedSeq map(final Function1<Object, Object> function) {...}

public RichString map(final Function1<Object, Object> function) {...}
Run Code Online (Sandbox Code Playgroud)

这会使它们的区别仅在于返回类型.

java generics methods jvm

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

如何创建像BeanProperty这样的自定义注释

在Scala中,可以使用注释@BeanProperty自动为字段生成getter和setter.

如何创建自己的注释?

我有兴趣创建更改源代码的注释,就像@BeanProperty一样.

作为示例,我如何创建仅生成get方法的注释?

谢谢.

annotations scala

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

继续进行有关以前计算的信息

我是函数式编程的新手,因此使用函数式方法解决一些问题似乎更难.

假设我有一个数字列表,例如1到10.000,我想得到列表中最多总数为n的项目(假设为100).因此,它会得到数字,直到它们的总和大于100.

在命令式编程中,解决这个问题是微不足道的,因为我可以在每次交互中保留一个变量,并在达到目标后停止.

但是我怎么能在函数式编程中做同样的事情呢?由于sum函数在已完成的列表上运行,而我仍然没有完成的列表,我怎样才能"继续"计算?

如果sum是懒惰计算的,我可以这样写:

           (1 to 10000).sum.takeWhile(_ < 100)
Run Code Online (Sandbox Code Playgroud)

PS:即使任何答案都会受到赞赏,我也希望每次都能计算出一个总和,因为显然命令式版本在速度方面会更加优化.

编辑:

我知道我可以将命令式循环方法"转换"为功能递归函数.我更感兴趣的是找到一个现有的库函数是否可以为我提供一种方法,让我不需要每次需要时都写一个.

functional-programming scala

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

Seam PDF - 将"p:data"键对齐到左侧

我有以下代码从数据生成pdf:

<p:barchart is3D="true" legend="false" orientation="horizontal" width="520">    
    <p:series key="Gráfico">
        <ui:repeat var="ocr" value="#{myBean.value}" >
            <p:data key="#{ocr[0]}" value="#{ocr[1]}" />
        </ui:repeat>
    </p:series>
</p:barchart>
Run Code Online (Sandbox Code Playgroud)

问题是来自p:data密钥与右边对齐(出于某种奇怪的原因).我尝试使用text-align将代码放在div之间,但它没有用.

我希望对齐位于左侧.

如果有人有答案,或者至少有一个让我尝试的想法,我真的很感激.

提前致谢.

pdf seam

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

为什么不可能有逆变返回类型

我正在玩Java中的泛型,我发现了一些奇怪的东西:


以下编译:

public static <A, B extends A> B reduce(Function2<A, A, B> func)
{  
   //code doesn't matter
}
Run Code Online (Sandbox Code Playgroud)


但以下不是:

public static <A, B super A> B reduce(Function2<A, A, B> func)
{  
   //code doesn't matter
}
Run Code Online (Sandbox Code Playgroud)


在我看来上面是完全有效的(毕竟,这几乎是Scala集合中reduce方法的签名).


为什么Java不允许逆变返回类型,特别是在这种情况下,因为将推断返回(通过Function2的第三个参数)?

java generics contravariance

5
推荐指数
0
解决办法
54
查看次数

toString.map和toString.toArray.map的性能差异

在编写欧拉问题时,我碰到了我认为奇怪的事情:

toString.map方法比toString.toArray.map慢.

这是一个例子:

def main(args: Array[String]) 
{
    def toDigit(num : Int) = num.toString.map(_ - 48) //2137 ms
    def toDigitFast(num : Int) = num.toString.toArray.map(_ - 48) //592 ms

    val startTime = System.currentTimeMillis;

    (1 to 1200000).map(toDigit)

    println(System.currentTimeMillis - startTime)
}
Run Code Online (Sandbox Code Playgroud)

字符串上的方法映射不应该回退到数组上的映射吗?为什么会出现如此显着的差异?(注意,增加数量甚至会导致非阵列情况下的堆栈溢出).

string performance scala

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

Scala对构造函数定义的属性的限制

在Scala中,可以在构造函数中定义类属性.但是一旦你在那里声明它们,就不可能改变行为(getter和setter),就像你在类体中声明一样?

例:

class MyExample(var attribute : String)
{
    def attribute() //trying to override getter <- doesn't work
}

class MyExample(theAttribute : String)
{
   def attribute = theAttribute //overriding default accessor (was var)
}
Run Code Online (Sandbox Code Playgroud)

如果不可能,为什么会这样呢?当你向人们展示他们可以通过在构造函数中设置var或val来轻松创建属性而不关心getter和setter(他们可以根据需要改变)时,这似乎令人困惑,最终发现,事实上,你应该避免使用那些一种便利.

attributes constructor scala class

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