如何在一行中为Java数组中的某个范围设置相同的值?

如何在一行中为Java数组中的某个范围设置相同的值?,java,arrays,methods,Java,Arrays,Methods,假设我有一个由100个元素组成的数组,我希望一定范围的索引具有一定的值。例如,指数0到10将有“鲍勃”,指数11-57将有“杰克”,指数58-99将有“约翰”。这可以在一行中完成吗?谢谢是的。可以使用IntStream.range(int,int)生成范围,然后映射到带有嵌套ternaries的字符串。像 System.out.println(Arrays.toString(IntStream.range(0, 100) .mapToObj(i -> i < 11 ?

假设我有一个由100个元素组成的数组,我希望一定范围的索引具有一定的值。例如,指数0到10将有“鲍勃”,指数11-57将有“杰克”,指数58-99将有“约翰”。这可以在一行中完成吗?谢谢

是的。可以使用
IntStream.range(int,int)
生成范围,然后映射到带有嵌套ternaries的
字符串。像

System.out.println(Arrays.toString(IntStream.range(0, 100)
        .mapToObj(i -> i < 11 ? "Bob" : i < 58 ? "Jake" : "John")
        .toArray()));
System.out.println(Arrays.toString(IntStream.range)(01100)
.mapToObj(i->i<11?“鲍勃”:i<58?“杰克”:“约翰”)
.toArray());

这是一个针对
Bob
的一行代码

 for(int i=0; i<10; i++) myArray[i]="Bob";
但必须确保数组已包含所需的范围:

 int arrLength = 99;
 ....
 String[] myArray = new String[arrLength];

在许多语言中,在元组中设置所有参数并将其作为列表进行评估是很简单的。然而,Java并不适合在一条语句中完成这类工作

Arrays.stream(new Object[] {
    new Object[] {0,10,"Bob"},
    new Object[] {11,57,"Jake"},
    new Object[] {58,99,"John"}
}).forEach(objs -> Arrays.fill(myArray,
            (int)(((Object[]) objs)[0]),
            ((int)(((Object[]) objs)[1]))+1,
            ((Object[]) objs)[2])
);
或者,如果您愿意滥用三元运算符,您可以使用这个可爱的gem(credits to):


Arrays.setAll(myArray,i->i)仅仅因为你可以在一行中做一些事情,并不意味着你应该检查
Arrays.fill()
method你想在一行中填充现有的数组吗?看:
Arrays.setAll(youraray,i->i<11?“Bob”:i<58?“Jake”:“John”);
Arrays.setAll可能更适合于现有数组,甚至是新数组。或者只是使用而不是滚动您自己的fillRange。它甚至具有相同的签名。
 int arrLength = 99;
 ....
 String[] myArray = new String[arrLength];
Arrays.stream(new Object[] {
    new Object[] {0,10,"Bob"},
    new Object[] {11,57,"Jake"},
    new Object[] {58,99,"John"}
}).forEach(objs -> Arrays.fill(myArray,
            (int)(((Object[]) objs)[0]),
            ((int)(((Object[]) objs)[1]))+1,
            ((Object[]) objs)[2])
);
Arrays.setAll(myArray, i -> i <= 10 ? "Bob" : i <= 57 ? "Jake" : "John");