嗨,伙计们,你能帮我吗?我在这里遇到了问题,
我有清单书:
1.数学 Rp.15.000
2.科学 Rp.18.000
3.地质学 Rp.16.000
4.生物学 Rp.12.000
用户输入他选择的书号,然后他得到了数组
int[] arrayNumberBookTake = {1,2,4};
然后我想将数组的值更改为新值,这取决于列表中的价格
int[] listBooktoPrice= Arrays.stream(arrayNumberBookTake).map(i -> i == 1 ? 15000 : i == 2 ? 18000 : i == 3 ? 16000 : i == 4 ? 12000 : i).toArray();
它工作和数组 listBooktoPrice 的输出:
[15000, 18000, 12000]
现在我想创建一个新数组,它从 arrayNumberBookTake 转换为 String
String[] nameBookTake = Arrays.stream(arrayNumberBookTake).map(i -> i == 1 ? "Math" : i == 2 ? "Sains " : i == 3 ? "Geologi" : i == 4 ? "Biologi" : i).toArray();
但该代码不起作用,我想要这样的数组 nameBookTake:
{"Math", "Sains", "Geologi"}
数组 nameBookTake 应取决于数组 arrayNumberBookTake 并与顶部的列表簿匹配。
我希望你们明白我的意思,谢谢你们:)
您的最后一个条件以参数 结尾i
。这是一个int
,不是一个String
。因此数组不均匀;不允许向Array
of添加整数String
。
解决方案:删除最后一个条件周围的"Biologi"
.
此外,Java 流在原语(如int
)和对象(如String
)之间有所不同。要将 转换IntStream
为Stream
of String
,可以使用mapToObj
,并通过传递String[]
to的构造函数来收集toArray()
。
像这样:
String[] nameBookTake = Arrays.stream(arrayNumberBookTake)
.mapToObj(i -> i == 1 ? "Math" : i == 2 ? "Sains " : i == 3 ? "Geologi" : "Biologi" )
.toArray(String[]::new);
这回答了你的问题。
然而:正如 Andy Turner 指出的那样,以这种方式使用条件是一种不好的做法。更好的做法是使用开关,如下所示:
String[] nameBookTake = Arrays.stream(arrayNumberBookTake)
.mapToObj( i -> switch( i )
{
case 1 -> "Math";
case 2 -> "Sains";
case 3 -> "Geologi";
case 4 -> "Biologi";
default -> "Unknown book!";
} )
.toArray(String[]::new);
更好的是将 Book 的属性捆绑到其单独的类中,在本例中为 an Enum
,从而产生完整的解决方案:
@Log4j2
public class Main
{
public static void main( String[] args )
{
int[] arrayNumberBookTake = {1,2,4};
int[] listBooktoPrice= Arrays.stream(arrayNumberBookTake)
.map( i -> Books.values()[ i ].price )
.toArray();
String[] nameBookTake = Arrays.stream(arrayNumberBookTake)
.mapToObj( i -> Books.values()[ i ].name )
.toArray(String[]::new);
}
}
enum Books
{
Math("Math", 15_000 ),
Sains("Sains", 18_000 ),
Geologi( "Geologi", 16_000 ),
Biologi( "Biologi", 12_000 );
String name;
int price;
Books( String name, int price )
{
this.name = name;
this.price = price;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句