java 如何将流中的一个值放入String [已关闭]

fnvucqvd  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(176)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

8小时前关闭
Improve this question
我有一个int类型的数字。如果数字为0,则在String中放入“bad”,如果数字为1,则在String中放入“normal”,如果数字为2,则在String中放入“good”。这是否可以在流中进行?

Random random = new Random();
int x = random.nextInt(3); // 0 - bad  1 - normal  2 - good
String str = IntStream.of(x).
jobtbby3

jobtbby31#

如果我理解正确的话,您只需要将单个值Map到字符串标签。为此,您可以定义一个hashmap来将整数值Map到它们的标签。

Map<Integer, String> map = new HashMap<>();
map.put(0, "bad");
map.put(1, "normal");
map.put(2, "good");
Random random = new Random();
int x = random.nextInt(3); // 0 - bad  1 - normal  2 - good
String str = map.get(x);

如果你有一个整数值的 * 集合 *,那么使用流可能更有意义:

List<Integer> list = Arrays.asList(0, 1, 2);
List<String> labels = list.stream()
                          .map(x -> map.get(x))
                          .collect(Collectors.toList());
System.out.println(labels);  // [bad, normal, good]
g6ll5ycj

g6ll5ycj2#

是的,你可以使用IntStream#mapToObj方法。
然而,有更好的方法来做到这一点。但是当你要求用一个Stream来做的时候,它就在这里。

Random random = new Random();
int x = random.nextInt(3); // 0 - bad  1 - normal  2 - good
String str = IntStream.of(x).mapToObj($ ->
        switch ($) {
            case 0 -> "bad";
            case 1 -> "normal";
            case 2 -> "good";
            default -> throw new IllegalStateException("Unexpected value: " + x);
        }
).findFirst().orElseThrow();

System.out.println("str = " + str);
ymdaylpp

ymdaylpp3#

您可以使用类似常量的Map来存储字符串和整数之间的Map。然后你可以使用mapToObj函数来获得使用Java流的结果。
对于单个元素,它可能看起来像

Map<Integer, String> mapping = Map.of(0, "bad", 1, "normal", 2, "good");
String result = IntStream.of(2).mapToObj(mapping::get).findFirst().get();

对于多个元素:对于单个元素,它可能看起来像

Map<Integer, String> mapping = Map.of(0, "bad", 1, "normal", 2, "good");
List<String> results = IntStream.of(2).mapToObj(mapping::get).collect(Collectors.toList());

相关问题