让我们假设我有一个Flight对象的列表
public class Flight {
private int passengers;
private int price
...
//getters and Setters
}
List<Flight> flightList = new ArrayList<Flight>();现在我需要积累每名乘客的价格和价格,因为我必须能够在以后进行这两方面的信息。所以我要创建两种方法:
public int calculatePrice(List<Flight> flightList) {
int price = 0;
for (Flight flight : flightList) {
price = price + flight.getPrice();
}
return price;
}
public int calculatePricePerPassengers(List<Flight> flightList) {
int pricePerPassenger = 0;
for (Flight flight : flightList) {
pricePerPassenger = (pricePerPassenger) + (flight.getPrice() / flight.getPassgers());
}
return pricePerPassenger;
}我有4-5种同类型的方法。我不确定是否有太多的冗余,因为我调用for循环4-5次,我可以轻松地在一个for循环中完成所有操作,但是这会产生多个返回值的效果。所以这样做合适吗?(只是一个虚拟的例子)
发布于 2018-02-07 17:37:43
您可以为此使用map,也可以扭曲要在类中返回的所有字段。这里我给出了使用Map的示例。
public static Map<String, Integer> calculatePrice(List<Flight> flightList) {
Map<String, Integer> priceMap = new HashMap<>();
int price = 0;
int pricePerPassenger = 0;
for (Flight flight : flightList) {
price = price + flight.getPrice();
pricePerPassenger = (pricePerPassenger) + (flight.getPrice() / flight.getPassgers());
}
priceMap.put("price", price);
priceMap.put("pricePerPassenger", pricePerPassenger);
return priceMap;
}编辑:使用包装类(DTO)的示例。
public static FligtPriceDTO calculatePrice(List<Flight> flightList) {
FligtPriceDTO dto = new FligtPriceDTO();
int price = 0;
int pricePerPassenger = 0;
for (Flight flight : flightList) {
price = price + flight.getPrice();
pricePerPassenger = (pricePerPassenger) + (flight.getPrice() / flight.getPassgers());
}
dto.setPrice(price);
dto.setPricePerPassenger(pricePerPassenger);
return dto;
}
}
class FligtPriceDTO {
private int price;
private int pricePerPassenger;
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getPricePerPassenger() {
return pricePerPassenger;
}
public void setPricePerPassenger(int pricePerPassenger) {
this.pricePerPassenger = pricePerPassenger;
}
}发布于 2018-02-07 18:01:27
您可以将这两个值包装到一个新数组中:
public int[] calculatePrices(List<Flight> flightList) {
int totalPrice = 0;
int pricePerCustomer = 0;
for (Flight flight : flightList) {
totalPrice += flight.getPrice();
pricePerCustomer += (flight.getPrice() / flight.getPassgers());
}
return new int[] { totalPrice, pricePerCustomer };
}发布于 2018-02-07 18:30:15
这一切归结为您想要提供给用户的功能。因此,如果用户希望能够单独计算这两种价格,那么我看不出有什么别的办法。但是,如果您可以同时提出两个价格,那么您可以消除其中一个方法,只循环一次通过您的飞行列表,并返回两个价格的组合。例:
public static Pair[] calculatePrices(List<Flight> flightList)
{
int pricePerFlight= 0;
int pricePerPassenger = 0;
for(Flight flight : flightList)
{
pricePerFlight = pricePerFlight + flight.getPrice();
pricePerPassenger = pricePerPassenger +(flight.getPrice()/flight.getPassgers());
}
return new Pair[] {new Pair<>("pricePerFlight", pricePerFlight), new Pair<>("pricePerPassenger", pricePerPassenger )};
}https://stackoverflow.com/questions/48669871
复制相似问题