我有一个对象的arraylistarraylist
Tile有新瓷砖的属性(“color”,value)
我想创建一个搜索函数,在这里我迭代遍历瓷砖的每个colour
属性和arraylist中每个颜色内的每个value
属性(就像每个循环的嵌套),有没有一种简单的方法可以做到这一点?
假设tile
类有两个属性string
colour
和int
value
。它有一个ToString
(java.lang.Object Class
的重写方法),如下所示:
@Override public String toString() {
return colour + ":" + value;
}
制作一些瓷砖:
Tile t1 = new Tile("red", 7); // constructor takes a colour and a value
Tile t2 = new Tile("red", 2);
Tile t3 = new Tile("blue", 9);
Tile t4 = new Tile("white", 17);
Tile t5 = new Tile("blue", 3);
Tile t6 = new Tile("red", 15);
Tile t7 = new Tile("white", 10);
方案1:
private static List<Tile> getTilesWithColor1(List<Tile> tilesList, String searchColor) {
return tilesList.stream()
.filter(tile -> tile.getColour().equals(searchColor))
.collect(Collectors.toList());
}
private static List<Tile> getTilesWithColor2(List<Tile> tilesList, String searchColor) {
List<Tile> result = new ArrayList<>();
for (Tile t : tilesList) {
if (t.getColour().equals(searchColor)) {
result.add(t);
}
}
return result;
}
我想做一个搜索函数,在这里我迭代遍历Tile的每个颜色属性和arraylist中的每个颜色中的每个值属性(就像嵌套的for each循环),有没有一个简单的方法可以做到这一点呢?
您可以更改此函数以添加附加条件或过滤器以获得所需的结果。
方案2:
private static Map<String, List<Integer>> getTileColorsAndValues(List<Tile> tilesList) {
return tilesList.stream()
.collect(Collectors.groupingBy(Tile::getColour,
Collectors.mapping(Tile::getValue, Collectors.toList())));
}
List<Integer> valuesList = map.get("red");
方案3:
按颜色获取所有瓷砖:
private static Map<String, List<Tile>> getTilesByColorsAndValues(List<Tile> tilesList) {
return tilesList.stream()
.collect(Collectors.groupingBy(Tile::getColour));
}
TilesList
{red=[red:7,red:2,red:15],white=[white:17,white:10],blue=[blue:9,blue:3]}
List<Tile> tilesList = map.get("red");
示例的代码:
import java.util.*;
import java.util.stream.*;
import java.util.function.*;
public class TilesExample {
public static void main(String [] args) {
Tile t1 = new Tile("red", 7);
Tile t2 = new Tile("red", 2);
Tile t3 = new Tile("blue", 9);
Tile t4 = new Tile("white", 17);
Tile t5 = new Tile("blue", 3);
Tile t6 = new Tile("red", 15);
Tile t7 = new Tile("white", 10);
List<Tile> tilesList = Arrays.asList(t1, t2, t3, t4, t5, t6, t7);
System.out.println(getTilesWithColor1(tilesList, "red"));
System.out.println(getTilesWithColor2(tilesList, "red"));
System.out.println(getTileColorsAndValues(tilesList));
System.out.println(getTilesByColorsAndValues(tilesList));
}
private static Map<String, List<Tile>> getTilesByColorsAndValues(List<Tile> tilesList) {
return tilesList.stream()
.collect(Collectors.groupingBy(Tile::getColour));
}
private static Map<String, List<Integer>> getTileColorsAndValues(List<Tile> tilesList) {
return tilesList.stream()
.collect(Collectors.groupingBy(Tile::getColour,
Collectors.mapping(Tile::getValue, Collectors.toList())));
}
private static List<Tile> getTilesWithColor1(List<Tile> tilesList, String searchColor) {
return tilesList.stream()
.filter(tile -> tile.getColour().equals(searchColor))
.collect(Collectors.toList());
}
private static List<Tile> getTilesWithColor2(List<Tile> tilesList, String searchColor) {
List<Tile> result = new ArrayList<>();
for (Tile t : tilesList) {
if (t.getColour().equals(searchColor)) {
result.add(t);
}
}
return result;
}
}
问题内容: 我有一堂课。它具有以下特征; 它具有2个属性,和。1个人可以拥有许多电话,因此您可能会在下面看到具有多个ID的人。 还有另一门课叫。它将有一个称为的方法。 personList,具有3-4个Person对象。我需要搜索PersonArrayList并找到与Person对象匹配的对象。我怎样才能做到这一点? 注意:我尝试过。但这是行不通的。 问题答案: 我尝试了personList.co
我试图根据用户输入找到一个特定的对象。用户需要输入姓名和性别,然后程序应该搜索ArrayList,查看是否有匹配的姓名和性别。ArrayList中的对象有3个实例变量,但程序只搜索2个。如何在ArrayList中只搜索选定的几个特征? 在我的项目中,我有: 其中,nameList是ArrayList的名称,getName()是返回存储在对象中的名称的方法的名称,getGender()是返回存储在对
我有一个带有自定义对象的ArrayList。我想在这个ArrayList中搜索字符串。 因此,我希望有一个函数在我的ArrayList中搜索所有的“name”字符串,例如5个对象。
对于我当前的项目,我必须搜索ArrayList of ZipCode对象,以便找到距离用户输入的int zip最远的ZipCode。 下面是编写我遇到问题的方法的说明:public ZipCode findfurtwest(int-pZip)-查找距离提供的邮政编码最远的ZipCode。如果未找到邮政编码,则返回null。例如,距离邮政编码75234最远的是ADAK,AK 99546。 在我的代码
问题内容: 我有一个包含许多对象的ArrayList。我想对相同属性名称的值进行求和。 示例数据为 ProfitAndLossDataDO的* 对象 * 结果将是(人相同时的值总和)- 逻辑类 ProfitAndLossDataDO 谢谢 问题答案: 我会遍历列表并将结果收集在地图中: 编辑: Java 8对接口的增强使我们能够以一种稍微更优雅的方式来实现此方法,中间是令人讨厌的代码块:
问题内容: 我有一个包含许多对象的ArrayList。我想对相同属性名称的值进行求和。 示例数据为 ProfitAndLossDataDO的* 对象 * 结果将是(人相同时的值总和)- 逻辑类 ProfitAndLossDataDO 谢谢 问题答案: 我会遍历列表并将结果收集在地图中: 编辑: Java 8对接口的增强使我们能够以一种稍微更优雅的方式来实现此方法,中间是令人讨厌的代码块: