我只是在kotlin的初级水平.我没有任何办法在kotlin中为数组添加值.我想从用户获取值并将它们添加到数组中.
val arr = arrayOf<Int>()
Run Code Online (Sandbox Code Playgroud)
要么
var arr = intArrayOf()
Run Code Online (Sandbox Code Playgroud)
像在Java中一样
Scanner ob=new Scanner(System.in);
int arr[]=new int[5];
for(int i=0;i<arr.length;i++)
{
arr[i]=ob.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
如何在kotlin中执行相同的操作?
我有几个数据类,其中包括一个var id: Int?
字段.我想在接口或超类中表达它,并且有数据类扩展它并id
在构造时设置它.但是,如果我试试这个:
interface B {
var id: Int?
}
data class A(var id: Int) : B(id)
Run Code Online (Sandbox Code Playgroud)
它抱怨我压倒了这个id
领域,我是哈哈.
问:A
在这种情况下,我如何让数据类在id
构造时使用它,并设置id
在接口或超类中声明的数据类?
Kotlin的财产和开放财产有什么区别?下面的代码抱怨我将setter 设为私有,而Intellij则说开放属性不允许私有 setter 。什么是开放财产?
@RestController
open class ParameterController {
@Autowired
lateinit var parameterRepository: ParameterRepository
private set //error
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的代码无效,但此代码有效?
open class ItemPrice{
lateinit var type: String
private set // ok
}
Run Code Online (Sandbox Code Playgroud)
编辑:我正在使用spring-allopen插件,并且将类显式标记为open没什么区别。
我想了解flatMap
使用Collector
s 执行一段时间的方法.这是一个例子.
场景:
我有以下接口:
interface Ic {
//empty
}
interface Ib {
Stream<Ic> getCs();
}
interface Ia {
String getName();
Stream<Ib> getBs();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试实现以下方法:
Map<String, Long> total_of_C_per_A (Stream<Ia> streamOfA) {
return streamOfA.collect(groupBy(Ia::getName, ???));
}
Run Code Online (Sandbox Code Playgroud)
该分类功能相当straitforward,我的问题是与下游收集器.我需要计算与"A"相关的"C"数.
我试图:
如果我想简单地返回计数而不创建地图,我会这样做:
streamOfA
.flatMap(Ia::getBs)
.flatMap(Ib::getCs)
.count();
Run Code Online (Sandbox Code Playgroud)
但是这个Collectors
类只允许我做映射操作.我还能尝试做些什么?
谢谢.
我需要根据一些数学函数生成整数流,每个值都基于之前的值。
例如 - 假设我想取最后一个数字并加 10:[1, 11, 21, 31, 41, ...]
当然真正的功能要复杂得多。
我尝试以斐波那契为例,但无法使其工作:
Stream.iterate(new long[]{ 1, 1 }, p->new long[]{ p[1], p[0]+p[1] })
.limit(92).forEach(p->System.out.println(p[0]));
Run Code Online (Sandbox Code Playgroud)
我只能从1开始。
这是我尝试做的:
Stream.iterate(new long[]{ 1 }, p-> {p[0], p[0] + 10})
.limit(4).forEach(p->System.out.println(p[0]));
Run Code Online (Sandbox Code Playgroud) 请帮助我理解kotlin文档中的这段代码: -
val a: Int = 10000
print(a === a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // !!!Prints 'false'!!!
Run Code Online (Sandbox Code Playgroud)
现在,我明白,int a = 10000
在下一行中它首先使用它进行比较===
.
现在问题是为什么当它被分配时boxedA=a
,它检查它是否为空使用int?
.可以这样写: -
val boxedA: Int=a
Run Code Online (Sandbox Code Playgroud)
如果我以错误的方式理解它,有人指导检查正确的地方或为我解释一下.
我知道Class.getDeclaredClasses()
可以获得它声明但不包括匿名类的所有类.
我想知道有没有办法通过封闭的类获得所有封闭的类?例如,我想获得Root
为测试目的定义的所有封闭类.
class Root{
void run(){
Runnable task = new Runnable(){
public void run(){}
};
task.getClass().getEnclosingClass();// return Root.class
// but I want to get all enclosed class via Root.class, for example:
// Root.class... == task.getClass()
}
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是:[class of task]
.
假设我有如下代码:
Future<Object> executeBy(ExecutorService executor) {
return executor.submit(() -> {
throw new IllegalStateException();
});
}
Run Code Online (Sandbox Code Playgroud)
使用ForkJoinPool#commonPool
时没有问题,但是当我使用并行性时ForkJoinPool
它会加倍IllegalStateException
.例如:
executeBy(new ForkJoinPool(1)).get();
// ^--- double the IllegalStateException
Run Code Online (Sandbox Code Playgroud)
Q1:为什么并行ForkJoinPool
一倍Exception
发生在Callable
?
Q2:如何避免这种奇怪的行为?
我试图了解流中的 reduce 方法是如何工作的。
Stream.of(1,2,3,4,5,6,7).reduce(new ArrayList<>(),
(List<Integer> l, Integer a) -> {l.add(a);return l;},
(List<Integer> l1, List<Integer> l2) -> {
System.out.println("l1 is" + l1 + "l2 is " + l2);
l1.addAll(l2);
return l1;
}).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
该行System.out.println("l1 is" + l1 + "l2 is " + l2)
永远不会被打印。我可以理解发生了什么,(List<Integer> l, Integer a) -> {l.add(a);return l;}
有人可以解释为什么没有打印出来吗?java文档说function for combining two values, which must be compatible with the accumulator function
谢谢,阿马尔
java-8 ×5
kotlin ×5
java ×4
java-stream ×3
properties ×2
arrays ×1
autoboxing ×1
boxing ×1
data-class ×1
exception ×1
fork-join ×1
inheritance ×1
nullable ×1
spring ×1