我想获取地图的值,找到min值,并为地图的每个条目构造一个新的CodesWitMinValue实例。我希望使用Java11个流,我可以在多行中使用多个流(一个用于min值,一个用于转换)来实现这一点。是否可以使用java 11流和收集器在单行中实现?谢谢。
public static void main(String[] args) {
Map<String, Integer> codesMap = getMockedCodesFromUpstream();
var minValue = Collections.min(codesMap.values());
var resultList = codesMap.entrySet().stream()
.map(e -> new CodesWithMinValue(e.getKey(), e.getValue(), minValue))
.collect(Collectors.toUnmodifiableList());
//is it possible to combine above three lines using stream and collectors API,
//and also can't call getMockedCodesFromUpstream() more than once. getMockedCodesFromUpstream() is a mocked implementation for testing.
//TODO: combine above three lines into a single line if possible
System.out.println(resultList);
}
private static Map<String, Integer> getMockedCodesFromUpstream(){
Map<String, Integer> codesMap = new HashMap<>();
codesMap.put("CDXKF", 44);
codesMap.put("GFDFS", 13);
codesMap.put("KUSSS", 10);
codesMap.put("EWSNK", 52);
codesMap.put("IOLHF", 21);
return codesMap;
}
private static class CodesWithMinValue{
public final String code;
public final int value;
public final int minValue;
public CodesWithMinValue(String code, int value, int minValue) {
this.code = code;
this.value = value;
this.minValue = minValue;
}
@Override
public String toString() {
return "CodesWithMinValue{" +
"code='" + code + '\'' +
", value=" + value +
", minValue=" + minValue +
'}';
}
}
我觉得这可以通过重构和隐藏数据片段来简化,而不是过度使用收集器。
private static BiFunction<Map<String, Integer>, Integer, List<MyNode>> getListOfMyNodeWithMinValue =
(map, minValue) ->
map.entrySet().stream()
.map(entry -> new MyNode(entry.getKey(), entry.getValue(), minValue))
.collect(Collectors.toList());
public static Function<Map<String, Integer>, List<MyNode>> getMyNodes =
map -> getListOfMyNodeWithMinValue.apply(map, Collections.min(map.values()));
之后可以将其用作MyNode。getMyNodes。应用(inputMap)。
忽略我的命名约定。只要输入我的感觉。希望你有这个想法。
为了更好地理解新的流API,我试图转换一些旧代码,但我被困在这一个。 我似乎无法为它创建有效的收集器:
我使用的是java 11,我有一个名为MyObject的对象列表,看起来像这样 我想使用流将这些对象收集到地图中 我试着用收集器来做。toMap(),但似乎不可能做到这一点 我的问题是可以制作一张地图吗
我有一个列表的地图,并希望收集所有的值,然后流在收集的列表上,所以给出:- 下面的工作/显示了我想用迭代做什么,但我想在流中做这些,而不是使用迭代创建一个中间列表:- 因此,我希望将列表的映射流化到一个列表中,然后在一个流中处理该子列表,而不是必须在两个语句中完成上述操作(即通过迭代构建列表,然后进行流化以筛选/排序和收集)。 到目前为止,我还没有做到这一点,当我尝试流式/收集地图时,我会遇到编译
我有一个列表,我想用流过滤,抓取前10个,并显示给用户。按下按钮后..我想从那个位置继续流。 但问题是,这里我不得不在第一个10+多个不匹配的过滤器上运行过滤器(再次)。
请考虑以下类: 如何才能编写一个java流“管道”,其工作方式与第一个方法(getRemainingCompanyBalance)相同。此代码将导致错误。 该清单包含每个部门的单独清单。子列表中的每个条目都是类的一个实例。名称/费用:
有没有办法把这两条流合并成一条?我使用第一个流在嵌套列表中进行过滤和查找,并使用第二个流根据流的结果创建地图。我想知道是否有一种方法可以用一条流来实现这一点。 像这样的