我需要一些帮助,在一个月内找到低费用和高费用。我有一个费用列表,其中费用类别具有以下值。您能否指导我如何对它们进行分组以获得Java-8中的预期输出?提前谢谢你的帮助。
Expenses
type:Grocercies
kind:fruits
value:20
date:09/15/2020
Expenses
type:Grocercies
kind:vegetables
value:20
date:09/01/2020
Expenses
type:Grocercies
kind:fruits,pulses
value:10
date:09/25/2020
Expenses
type:Grocercies
kind:fruits,milk
value:18
date:09/23/2020
Expenses
type:Grocercies
kind:vegetables,pulses
value:15
date:09/10/2020
Combined Rates
Fruits,Pulses : 30
Vegetables,pulses : 35
Fruits,milk : 38
预期产出
Low expense : Fruits,Pulses
High Expense : Fruits,milk
我尝试按类型(杂货)进行分组,即Map
我尝试了以下方法。我不确定这是一个有效的方法。有没有其他方法可以实现它?
public static void main(String[]args){List expenses=prepareBastostA();Map
private static List<ExpenseOutput> calculateValue(Map<String, List<Expenses>> expensesOfAllKinds,
Entry<String, List<Expenses>> expenseOfAKind) {
List<Expenses> expenseOfAKindOfGrocery = expenseOfAKind.getValue();
List<Expenses> expensesOfOtherKinds = expensesOfAllKinds.entrySet().stream()
.filter(expenseOfDifferentKind -> !expenseOfDifferentKind.equals(expenseOfAKind))
.map(expenseOfDifferentKind -> expenseOfDifferentKind.getValue())
.flatMap(expenseOfDifferentKind -> expenseOfDifferentKind.stream()).collect(Collectors.toList());
return expenseOfAKindOfGrocery.stream()
.map(oneKindOfExpense -> mapAppropriateKindAndAddValue(oneKindOfExpense, expensesOfOtherKinds))
.flatMap(x -> x.stream()).collect(Collectors.toList());
}
private static List<ExpenseOutput> mapAppropriateKindAndAddValue(Expenses expenseOfAKind,
List<Expenses> expensesOfOtherKinds) {
return expensesOfOtherKinds.stream()
.filter(expenseOfOtherKind -> checkWhetherTheyHaveSameKind(expenseOfOtherKind, expenseOfAKind))
.map(expenseOfOtherKind -> addValueIfSameKindExists(expenseOfOtherKind, expenseOfAKind))
.collect(Collectors.toList());
}
private static boolean checkWhetherTheyHaveSameKind(Expenses expenseOfOtherKind, Expenses expenseOfAKind) {
List<String> expenseOfAKindList = Arrays.asList(expenseOfAKind.getKind().split(","));
List<String> expenseOfOtherKindList = Arrays.asList(expenseOfOtherKind.getKind().split(","));
return expenseOfOtherKindList.stream().allMatch(expense -> expenseOfAKindList.contains(expense));
}
private static ExpenseOutput addValueIfSameKindExists(Expenses expenseOfOtherKind, Expenses expenseOfAKind) {
ExpenseOutput output = new ExpenseOutput();
output.setValue(expenseOfOtherKind.getValue() + expenseOfAKind.getValue());
List<String> expenseOfAKindList = new ArrayList<>(Arrays.asList(expenseOfAKind.getKind().split(",")));
List<String> expenseOfOtherKindList = new ArrayList<>(Arrays.asList(expenseOfOtherKind.getKind().split(",")));
expenseOfOtherKindList.addAll(expenseOfAKindList);
Set<String> finalKind = expenseOfOtherKindList.stream().collect(Collectors.toSet());
output.setKind(String.join(",", finalKind));
return output;
}
我想知道,如何在Java8中使用流API迭代多级列表 根据Java8,我应该做如下的操作 我想要流利地做这件事(使用内部迭代)。任何解释都会很感激。
我有两份清单: 列表1: Object1(name1, id1) 列表2: Object2(name2, id2) 给定list1的大小与list2相同 我想迭代list2,如果list2的name2不为null,则更新list1的name1。 以下是使用旧java的代码: 用java实现这一点的最佳方法是什么。util。流动
我在迭代一个对象内的列表时遇到了一个问题,该对象内嵌在另一个映射中。我的目标是迭代这个列表并生成一个映射 ,我希望使用streams和lamdas来实现这一点。 我在上面看到了,我需要通过迭代FolderBo中的elementList从elementBo创建一个带有map 的映射。folderBo本身就在Modelbo的地图内。
问题内容: 从此列表: 我正在尝试创建: 被发现相同的任何值都被分组到其自己的子列表中。到目前为止,这是我的尝试,我在想应该使用循环吗? 问题答案: 有人提到它会得到 换句话说,当列表的编号不按顺序排列或为混乱列表时,该列表将不可用。 所以我有更好的答案来解决这个问题。
我有一个映射,它包含日期作为键和(另一个字符串作为键和列表作为值的映射)作为值。,我想填充另一个将String作为键和double作为值的映射。FlexiServer的内容包括 因此,基本上,我想首先迭代外部映射以获得内部映射,然后迭代内部映射以获得FlexiServers列表,并填充新的映射,其中服务器号作为键,数量列表作为值。我如何使用Java8流来实现这一点呢? 我尝试使用for循环,但我希
我有客户对象的列表。我想迭代列表并按1递增顺序。 我尝试了每个列表,但在这里我必须创建新列表并在其中添加值。 有没有更好的方法?我尝试使用streams,但它只是映射订单